2つのGitブランチの最新の共通祖先を見つける方法は?
4 に答える
あなたが探しているgit merge-base
。使用法:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
git diff master...feature
現在の(場合によってはマルチコミット)機能ブランチのすべての新しいコミットを表示します。
man git-diff
次のような文書:
git diff A...B
と同じです:
git diff $(git merge-base A B) B
ただし、...
入力して覚える方が簡単です。
デイブが述べたように、の特殊なケースはHEAD
省略できます。それで:
git diff master...HEAD
と同じです:
git diff master...
現在のブランチが。の場合はこれで十分ですfeature
。
最後に、順序が重要であることを忘れないでください!実行すると、オンになっていないgit diff feature...master
変更が表示されます。master
feature
より多くのgitコマンドがその構文をサポートすることを望みますが、サポートするとは思いません。また、セマンティクスが異なるものもあり...
ます。Gitコミット範囲のダブルドット「..」とトリプルドット「...」の違いは何ですか?
前の回答で述べたように、git merge-base
機能しますが、
$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
myfeature
が現在のブランチである場合、一般的なように、次を使用できます--fork-point
。
$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
この引数は、十分に新しいバージョンのgitでのみ機能します。残念ながら、常に機能するとは限りません。理由は明らかではありません。この回答の最後に記載されている制限を参照してください。
完全なコミット情報については、以下を考慮してください。
$ git log -1 $(git merge-base --fork-point develop)
これによりgitk
、2つのブランチをグラフィカルに表示できます。
gitk branch1 branch2
そして、2つのブランチの歴史の中で共通の祖先を見つけるのは簡単です。