9

2 つのブランチ間で以前のマージ コミットを見つけるにはどうすればよいですか?

前回リリース ブランチをマスター ブランチにマージしてからのマスター ブランチの変更を確認したいと思います。最後のブランチ以降のリリース ブランチの変更を確認するには、次のように簡単です。git diff ...release

ただし、最後のマージ前のすべての変更も含まれているため、明らかにgit diff release...機能しません。したがって、それを渡すには最後のマージのコミットIDが必要だと思いますgit diff

git log --reverse --ancestry-path `git merge-base HEAD release`.. \ 
        --format=format:%H|head -n1

動作するようで、 で使用できますがgit diff $(...)、非常に複雑に思えます。もっと簡単な解決策はありますか?

  I
 / \
A1 B1
 \ |
|  M   
|  |
A2 B2

これIが最初のコミットです。A[12]はリリース コミットでB[12]あり、マスター コミットです。M以前のコミットです。この例では、最後のマージとマスターの間の変更は、B2 によって導入された変更のみです。は1をgit merge-base A2 B2返します。の変更を含みます。したがって、問題は、一般的なより複雑なケースで M を見つけて、手動で を見つけなくても実行できるようにする方法です。Agit diff B2 A1B1git diff M B2M

4

2 に答える 2

6

あなたが探しているのは、2つのブランチ間の最後のマージではなく、2つのブランチが異なり始めたポイントのようです。これらの2つの概念は異なります。これは、リリースブランチがマージされてからしばらくしてから早送りされた可能性があるためです。

git merge-base master releaseマスターブランチとリリースブランチの最新の共通祖先(つまり、2つが共通している最後のコミット)を検索します。

次に、マスターgit diff [common ancestor] HEADで、共通の祖先以降にマスターに加えられた変更を確認するために使用できます。

于 2012-05-10T01:29:06.393 に答える
0

これにより、ブランチ foo とブランチ マスターの間の最新のマージ コミットが表示されます。

git log foo master --oneline --date-order --merges -1

--oneline is just to keep the output short
--date-order to get the latest first
--merges to only show merge commits
-1 to display the first result only
于 2012-05-10T00:13:25.473 に答える