2017-02-18 10 views
0

だから、git log master --merges -1を使用して最新のマージをマスターすることができます。私はこれをさらに進めて、最新のマージからマスターへの最新のコミットだけを取得したいと思います。どのようにこれを行うでしょうか?gitのブランチに最新のマージをコミットする方法

たとえば、私がmaster,staging,feature1およびfeature2の枝を持っているとします。 feature1stagingにマージし、次にmasterにマージします。その後、私はfeature2と同じことをやります。 feature2をマージする際に、どうやったらそれが起こるのですか?

+0

あなたは "子のコミット"を求めましたが、あなたの例と受け入れられた答えは、* parent *のコミットを探しているようです。これはかなり単純です(xarthnaxの答えは正しい)。コミットのグラフを描くと、概念がより明確になります。 'A..B'という文法は、' 'Bで始まってその履歴を取り戻すことで見つけることができるすべてのコミットを取得し、その後、そのリストから' 'Aそして、その歴史を通して働いている」と語った。 – torek

+0

@torek私はあなたがこの1つに間違っていると信じています。今後これを探している人たちに私の質問を編集させてください。 –

答えて

0

git log master --merges -1の後、そのマージの2つの親コミットを確認します。次にgit log <parent1>..<parent2> --right-only --no-merges --format=format:%Hを発行して、feature2ブランチからコミットをリストします。

+0

これはありがとう、本当にシンプルで、私はコマンドラインに重すぎることなく質問に答えてくれると思います。 –

+0

'--right-only'は対称差分' commit1 ... commit2'(3ドット)に対して実際に意味をなさぎます。ちょうど2つのドットを使うときは、 '--right-only'の有無にかかわらず同じ結果を得なければなりません。 – torek

0

--childrenフラグを試しましたか?

git log master --children --merges -1 

か、

https://gist.github.com/kohsuke/7590246

+0

私はそれにショットを与えましたが、そのコマンドはマスターからの最新のマージを与えるように見え、子供は一切含まれていません。 –

+0

あなたは[kohsukeのアプローチgit-children-of](https://gist.github.com/kohsuke/7590246)を試すことができます。最初のコマンドの結果をパイプするだけでよいでしょう。 –

0

git log -1 --merges --pretty=format:"%H"を試すことができますが、最後のマージのSHAコミットできます。

このSHAを使用して、git rev-list --all --childrenの出力をフィルタリングし、結果が親が指定されたSHA1であるコミットに限定することができます。また

COMMIT=`git log -1 --merges --pretty=format:"%H"` 
git rev-list --all --children | grep "^${COMMIT}" | cut -f2 -d' ' 

git-rev-list documentationによると、

--children 印刷コミットの子供(形で "子供をコミット...")。

したがってgrep "^${COMMIT}"は、最後のマージコミットで始まる行が確実に出力されます。

関連する問題