Perubahan detail setelah Git pull

130

Setelah tarikan Git, outputnya memberikan ringkasan tentang jumlah perubahan.

Bagaimana saya bisa melihat masing-masing atau beberapa file perubahan rinci?

Oke, ini pertanyaan saya untuk Jefromi:

  1. Bagaimana saya tahu jika saya tertarik untuk menguasai? Yang saya lakukan adalah "git pull".

  2. Apa yang ditunjuk oleh master dan apa perbedaan antara master dan HEAD, dua kepala default Git?

  3. Bagaimana cara melihat perubahan terperinci dalam file tertentu?

  4. Bagaimana saya melihat perubahan pada output ringkasan oleh yang terakhir git pulllagi?

  5. Apa perbedaan antara git diffdan git whatchanged?

Tim
sumber
4
Oke, penambahan pertanyaan baru yang berulang melalui suntingan ini tidak persis seperti yang dimaksudkan sistem untuk digunakan. Anda juga dapat dengan mudah menjawab banyak pertanyaan Anda dengan melihat halaman manual atau hanya dengan mencoba sesuatu. Misalnya, git diffdengan jelas menampilkan diff, sementara git whatchangeddengan jelas menampilkan daftar informasi komit, masing-masing berisi daftar file apa yang diubah.
Cascabel
Mungkin karena perwakilan Anda yang rendah.
TED
@TED ​​Hanya perlu 50 rep untuk meninggalkan komentar, dan 15 untuk memperbaiki.
Cascabel
Di laptop saya dengan Ubuntu, terkadang berfungsi kadang tidak. Saya sementara menemukan komputer lain dengan Centos dan saya membuat komentar ini. Di kedua komputer saya menggunakan Firefox.
Tim
Sangat aneh. Anda mungkin ingin menuju ke meta dan melihat apakah itu masalah yang diketahui / laporkan.
Cascabel

Jawaban:

204

Misalkan Anda tertarik untuk menguasai. Anda dapat merujuk ke posisi sebelumnya masterdengan master@{1}(atau bahkan master@{10.minutes.ago}; lihat bagian revisi yang ditentukan pada halaman manual git-rev-parse ), sehingga Anda dapat melakukan hal-hal seperti

  • Lihat semua perubahan: git diff master@{1} master

  • Lihat perubahan pada file yang diberikan: git diff master@{1} master <file>

  • Lihat semua perubahan dalam direktori yang diberikan: git diff master@{1} master <dir>

  • Lihat ringkasan perubahan lagi: git diff --stat master@{1} master

Adapun pertanyaan Anda tentang "bagaimana saya tahu jika saya menguasai" ... yah, menggunakan cabang adalah bagian penting dari alur kerja Git. Anda harus selalu waspada dengan cabang apa yang Anda tuju - jika Anda menarik perubahan, Anda ingin menariknya ke cabang yang tepat! Anda dapat melihat daftar semua cabang, dengan tanda bintang oleh yang saat ini check-out, dengan perintah git branch. Nama cabang saat ini juga dicetak bersama dengan output dari git status. Saya sangat merekomendasikan membaca halaman manual dari perintah untuk digunakan - ini adalah cara yang bagus untuk secara perlahan mengambil beberapa pengetahuan.

Dan pertanyaan terakhir Anda: HEADadalah nama untuk cabang yang saat ini check out. Anda memang dapat menggunakan HEADdan HEAD@{1}dalam konteks ini juga, tetapi sedikit lebih kuat untuk menggunakan cabang, karena jika Anda pergi dan memeriksa cabang lain. HEADsekarang cabang kedua, dan HEAD@{1}sekarang master- bukan apa yang Anda inginkan!

Untuk menghemat karena harus mengajukan banyak pertanyaan kecil seperti ini, Anda mungkin harus melihat tutorial Git. Ada jutaan di web, misalnya:

Cascabel
sumber
5
ini lebih baik daripada solusi saya :)
Christian Oudard
2
Saya tahu ini sudah tua, tapi ... Seharusnya git diff master@{1} mastersebaliknya
:,
2
git diff master@{1} mastertidak bekerja untuk saya melainkan git diff master~1 mastermelakukan pekerjaan untuk saya.
unrealsoul007
5
@ unrealsoul007 Lalu situasimu berbeda. master ~ 1 adalah komit induk dari master satu yang saat ini menunjuk ke; Anda akan melihat perbedaan hanya untuk komit itu. master @ {1} adalah komit master sebelumnya yang ditunjukkan; jika misalnya Anda baru saja menarik, itu akan menjadi posisi master sebelum tarik seperti dijelaskan di sini. Jika tidak melakukan itu, maka Anda mungkin telah melakukan hal lain untuk dikuasai sejak Anda menarik. Coba git reflog masterpahami apa.
Cascabel
@ Jeffromi fatal: ambiguous argument 'firstDesign@': unknown revision or path not in the working tree.saya terus mendapatkan kesalahan ini. Meskipun git reflog firstDesign memiliki output ini .
unrealsoul007
52

Katakanlah Anda melakukan git pull seperti ini:

$ git pull
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From [email protected]:reponame
   a407564..9f52bed  branchname   -> origin/branchname
Updating a407564..9f52bed
Fast forward
 .../folder/filename          |  209 ++++++++-----
 .../folder2/filename2        |  120 +++++++++++---------
 2 files changed, 210 insertions(+), 119 deletions(-)

Anda dapat melihat perbedaan dari apa yang diubah dengan menggunakan angka revisi:

$ git diff a407564..9f52bed
Christian Oudard
sumber
5
Dan Anda bisa mendapatkan ringkasan menggunakan " git diff --stat a407564..9f52bed" atau hanya ringkasan " git diff --summary a407564..9f52bed"
Jakub Narębski
14
Untuk versi git yang lebih baru, git pull tidak lagi menampilkan daftar file yang diubah. Untuk mendapatkannya, Anda perlu melakukan `git pull --stat '
user10
6

1. Bagaimana saya tahu jika saya tertarik untuk menguasai? Yang saya lakukan adalah "git pull".

Perintah itu sendiri berfungsi seperti ini:

git pull [options] [<repository> [<refspec>…]]

dan per default mengacu pada cabang saat ini. Anda dapat memeriksa cabang Anda dengan menggunakan

git branch -a

Ini akan mencantumkan cabang lokal dan jarak jauh Anda seperti misalnya (ditambahkan --- sebagai pembagi antara lokal dan jarak jauh untuk membuatnya lebih jelas)

*master
foo
bar
baz
---
origin/HEAD -> origin/master
origin/deploy
origin/foo
origin/master
origin/bar
remote2/foo
remote2/baz

Saat Anda melihat satu repo jarak jauh, Anda akan melihat apa yang Anda maksudkan:

git remote show origin

akan daftar seperti berikut:

* remote origin
  Fetch URL: ssh://[email protected]:12345/username/somerepo.git
  Push  URL: ssh://[email protected]:12345/username/somerepo.git
  HEAD branch: master
  Remote branches:
    foo    tracked
    master tracked
  Local refs configured for 'git push':
    foo    pushes to foo    (up to date)
    master pushes to master (fast-forwardable)

Jadi cukup mudah untuk memastikan dari mana menarik dan mendorong.

3. bagaimana cara melihat perubahan detail dalam file tertentu?

4. bagaimana cara melihat perubahan pada output ringkasan dengan git pull terakhir lagi?

Cara termudah dan paling elegan (imo) adalah:

git diff --stat master@{1}..master --dirstat=cumulative,files

Ini akan memberi Anda dua blok informasi tentang perubahan di antara tarikan terakhir Anda dan kondisi kerja saat ini. Contoh output (saya menambahkan --- pembagi antara --statdan --dirstatkeluaran untuk membuatnya lebih jelas):

 mu-plugins/media_att_count.php                     |  0
 mu-plugins/phpinfo.php                             |  0
 mu-plugins/template_debug.php                      |  0
 themes/dev/archive.php                             |  0
 themes/dev/category.php                            | 42 ++++++++++++++++++
 .../page_templates/foo_template.php                |  0
 themes/dev/style.css                               |  0
 themes/dev/tag.php                                 | 44 +++++++++++++++++++
 themes/dev/taxonomy-post_format.php                | 41 +++++++++++++++++
 themes/dev/template_parts/bar_template.php         |  0
 themes/someproject/template_wrappers/loop_foo.php  | 51 ++++++++++++++++++++++
---
 11 files changed, 178 insertions(+)
  71.3% themes/dev/
  28.6% themes/someproject/template_wrappers/
 100.0% themes/
  27.2% mu-plugins/
   9.0% themes/dev/page_templates/
   9.0% themes/dev/template_parts/
  63.6% themes/dev/
   9.0% themes/someproject/template_wrappers/
  72.7% themes/
kaisar
sumber
2

Ini jenis peretasan, tetapi ini memungkinkan Anda untuk menggunakan alat grafis seperti gitkatau gitgatau git-gui:

git pull
git reset HEAD@{1}
gitg (or gitk or whatever tool you like)

Jawaban dengan paling upvotes memberikan cara terbaik menggunakan alat git, tapi saya menggunakan metode ini karena saya kemudian dapat menggunakan alat dengan GUI untuk melihat perubahan: P

Saya kemudian akan memiliki langkah ekstra untuk melakukan git checkout .dan kemudian melakukan git pulllagi sehingga saya benar-benar menarik dan menggabungkan, tetapi saya menghargai kemampuan untuk memeriksa perbedaan dalam GUI cukup untuk menangani dua langkah tambahan.

Mendongkrak
sumber