Ketika saya menjalankan "git pull", saya sering ingin tahu apa yang berubah antara versi terakhir dari sebuah file dan yang baru. Katakanlah saya ingin tahu komitmen orang lain pada file tertentu.
Bagaimana caranya?
Saya berasumsi itu "git diff" dengan beberapa parameter untuk komit x versus komit y tapi sepertinya saya tidak bisa mendapatkan sintaksnya. Saya juga menemukan "git log" agak membingungkan dan saya tidak yakin di mana mendapatkan ID komit dari versi terbaru saya dari file versus yang baru.
Jawaban:
Ada berbagai macam cara yang indah untuk menentukan komit - melihat revisi menspesifikasikan bagian
man git-rev-parse
untuk rincian lebih lanjut. Dalam kasus ini, Anda mungkin menginginkan:The
@{1}
berarti "posisi sebelumnya dari ref saya sudah ditentukan", sehingga mengevaluasi apa yang Anda telah memeriksa sebelumnya - sebelum pull. Anda dapat menempelHEAD
di ujung sana jika Anda juga memiliki beberapa perubahan dalam pohon kerja Anda dan Anda tidak ingin melihat perbedaannya.Saya tidak yakin apa yang Anda minta dengan "ID komit versi terbaru saya dari file" - komit "ID" (hash SHA1) adalah hex 40 karakter tepat di bagian atas setiap entri dalam output dari git log. Ini adalah hash untuk keseluruhan komit, bukan untuk file yang diberikan. Anda tidak benar-benar membutuhkan lebih banyak - jika Anda ingin membedakan hanya satu file di seluruh tarikan, lakukan
Ini adalah hal yang umum - jika Anda ingin mengetahui tentang status file dalam komit yang diberikan, Anda menentukan komit dan file, bukan ID / hash khusus untuk file tersebut.
sumber
@{1}
sebagai singkatan untukHEAD@{1}
)Saya suka menggunakan:
Atau jika saya hanya ingin membeda-bedakan file tertentu:
sumber
HEAD^
adalah komit orang tua, bukan komit sebelumnyapull
HEAD
adalah komit gabungan,HEAD^
adalah komit orang tua pertama, jadi ya, itu bisa menjadi komit sebelumpull
. Untuk mendapatkan induk lainnya (untuk penggabungan dua arah), gunakanHEAD^2
. Tapi kemudian, jawaban di atas tidak benar-benar menjawab pertanyaan di tempat pertama, jadi tinggalkan -1 ;-)Jika Anda melakukan straight
git pull
maka Anda akan 'dipercepat' atau menggabungkan sejumlah komit yang tidak diketahui dari repositori jarak jauh. Ini terjadi sebagai satu tindakan, jadi komit terakhir yang Anda lakukan tepat sebelum penarikan akan menjadi entri terakhir dalam reflog dan dapat diakses sebagaiHEAD@{1}
. Artinya, Anda dapat melakukan:Namun, saya sangat menyarankan bahwa jika ini adalah sesuatu yang sering Anda lakukan, Anda harus mempertimbangkan untuk melakukan
git fetch
dan memeriksa cabang yang diambil sebelum menggabungkan atau melakukan rebasing secara manual. Misalnya jika Anda berada di master dan akan menarik asal / master:sumber
git log
daripada digit diff
sini (meskipun sintaksnya agak tidak koheren antara '..' untukgit log
dan '...' untukgit diff
;) +1 Lihat stackoverflow.com/questions/53569/… dan stackoverflow.com/questions / 850607 /…