Bagaimana menemukan leluhur bersama terbaru dari dua cabang Git?
Bagaimana menemukan leluhur bersama terbaru dari dua cabang Git?
Jawaban:
Anda sedang mencari git merge-base
. Pemakaian:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
git log master...HEAD
--octopus
bendera untuk mendapatkan hasil yang tepat. Yang jelas-tetapi-salah git merge-base branch1 branch2 branch3
akan memberi Anda komitmen, tetapi, seperti yang dijelaskan dalam bagian Diskusi dalam dokumen, itu tidak selalu merupakan leluhur bersama dari ketiga cabang.
git diff master...feature
menunjukkan semua komit baru dari cabang fitur Anda saat ini (mungkin multi-komit).
man git-diff
dokumen yang:
git diff A...B
sama dengan:
git diff $(git merge-base A B) B
tetapi ...
lebih mudah untuk mengetik dan mengingat.
Seperti yang disebutkan oleh Dave , kasus khusus HEAD
dapat dihilangkan. Begitu:
git diff master...HEAD
sama dengan:
git diff master...
yang cukup jika cabang saat ini feature
.
Akhirnya, ingatlah bahwa ketertiban penting! Melakukan git diff feature...master
akan menampilkan perubahan yang master
tidak aktif feature
.
Saya berharap lebih banyak perintah git akan mendukung sintaks itu, tetapi saya tidak berpikir mereka melakukannya. Dan beberapa bahkan memiliki semantik berbeda untuk ...
: Apa perbedaan antara double-dot ".." dan triple-dot "..." dalam rentang Git commit?
git diff master...
dalam kasus khusus diffing toHEAD
git diff origin/branchname...
Seperti disebutkan dalam jawaban sebelumnya, git merge-base
berfungsi:
$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
tetapi jika myfeature
cabang saat ini, seperti yang umum, Anda dapat menggunakan gunakan --fork-point
:
$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
Argumen ini hanya berfungsi di versi git yang cukup baru. Sayangnya itu tidak selalu berhasil, dan tidak jelas mengapa. Silakan merujuk pada batasan yang dicatat pada akhir jawaban ini .
Untuk info komit penuh, pertimbangkan:
$ git log -1 $(git merge-base --fork-point develop)
git version 2.14.1.windows.1
. Menjalankan git merge-base --fork-point branch2
dengan cabang (dengan komit sendiri) yang saya tahu telah bercabang dari cabang saat ini tidak menghasilkan hasil apa pun, sedangkan git merge-base branch1 branch2
dengan benar menunjukkan titik garpu. Apa yang bisa menjadi masalah?
branch2
lalu jalankan git merge-base --fork-point branch1
.
gitk
, dll. Untuk melihat seperti apa pohon itu. Mungkin Anda akan mendapatkan jawaban Anda.
git merge-base branch1 branch2
. Tapi yang aneh adalah itu --fork-point
tidak memberikan apa-apa. Sudahkah Anda mengonfirmasi bahwa itu berfungsi untuk Anda seperti yang dimaksudkan?
Dengan gitk
Anda dapat melihat dua cabang secara grafis:
gitk branch1 branch2
Dan kemudian mudah untuk menemukan nenek moyang yang sama dalam sejarah dua cabang.