2016-05-21 14 views
1

2つのブランチ間で異なるログを取得する方法を調べるためのテスト用gitプロジェクトを作成しました。gitは2つのブランチ間でログを異ならせます

ほとんどのケースでは、我々は、このようなケースがあります:ブランチマスターはマスターする桜の厳選されたいくつかのコミットを持って、グラフの下に以下を参照してください enter image description here

「私は」コミットチェリー選んだ枝を習得することです。 masterとdbg_featureのログが異なると予想される結果は、 "J"のみである必要があります。

しかし、私は、コマンドの下に実行すると、実際に、:

+ a1915061be2f445d322abc7bfb7d19bbb357b917 I 
+ 6486e899e07b6d6f539cbcad10655dcc345f434d J 

git cherry -v master dbg_feature 

私は "I" と "J"、チェリー選んだ一つの "I" はまだそれにリストを取得します

私は、コマンドの下に実行する場合:

git log --oneline --no-merges master..dbg_feature 

出力は以下の通りです:

6486e89 J 
a191506 I 

以下のようにgitのREV-listコマンドを実行した場合:

git rev-list --oneline --no-merges --cherry-pick --right-only master...dbg_feature 
6486e89 J 
a191506 I 

結果はgitのログと同じようです。

この2つのブランチ間で正確に異なるログを取得するには適切なコマンドは何ですか?

+0

cherry-pickコミットは新しいコミットとして扱われるので、チェリーピックされたコミットを除外するような違いはないと思います。すべてがマージされれば、それはうまくいくはずです。 – beetlej

+0

少し奇妙な、出力によると、 "I"と "J" dbg_featureのコミットがマスターのではないはずです。それに加えて、masterはIまたはJと同等のコミットを持っていません。それと同等のコミットがあれば+は - です。 – ElpieKay

+0

@ElpieKayええ、私はチェリーピックで習得したので、そのコマンドはそれを知らないようです。 – lucky1928

答えて

0

「異なるコミット」が意味することは私には分かりません。しかし、git cherryを使用してのあなたの言及は、あなたが(私と彼らは「非等価」と呼ぶがコミットされ、またはその逆)、「同等」または「パッチ相当」コミットと呼んで何the git rev-list documentationについて話していることを示唆している:

--cherry-mark

--cherry-pick同様           (下記参照)が、マークと同等の+=ではなく、それらを省略し、非等価ものでコミットします。

           

--cherry-pickを省略任意にそれが別の「反対側」にコミットと同じ変化を導入コミットするときコミットのセットは、対称差で制限されています。例えば

           あなたは二つのブランチ、ABを持っている場合、すべての一覧を表示する通常の方法は、上のコミットそれらの片側のみが--left-rightである(--left-rightの説明に以下の例を参照してくださいオプション)。ただし、他のブランチからチェリーピックされたコミットを表示します(たとえば、 "3rd on b"はブランチAからチェリーピッキングされている可能性があります)。このオプションを使用すると、コミットのペアが出力から除外されます。

--left-only
--right-only

           リストのみ即ちのみ< RESPとマークされるであろう、対称範囲のそれぞれの側にコミット。 >によって--left-right。例えば

           、--cherry-pick --right-only A...BAであるか、またはパッチ相当AにコミットにあるBからそれらのコミットを省略しています。言い換えれば、これはgit cherry A Bからの+のコミットをリストします。より正確には、--cherry-pick --right-only --no-mergesは正確なリストを提供します。

--cherry

            --right-only --cherry-mark --no-mergesの同義語。私たち側のコミットに出力を制限し、git cherry upstream mybranchに似た、git log --cherry upstream...mybranchというフォークされた履歴の反対側に適用されたものをマークするのに便利です。

また、これらはすべてgit rev-listコマンドの引数です。 git rev-listgit logはほとんど同じコマンドです(出力形式のような細かい部分は除きます):git logも同様です。

+0

ログが異なる可能性がありますか?更新しました。コマンド "git rev-list --online --no-merges -cherry master..dbg_feature"が同じように出力されているようです。私とJは、Jだけではありません。 – lucky1928

+0

私のつまずくブロックは、単語 "違い"です。これは英語の単語ですが、単語としては動詞です:フレッドとボブは異なる、ボブとキャロルは同意します。例えば、「git log A」と「git log B」を実行して別の出力を得たということです。これは驚くべきことではありません(例えば、http://www.dictionary.com/browse/differを参照)。あなたの実際の質問とは何の関係もないようです。一方、これらの 'rev-list'フラグは* 3 *ドット構文と一緒に使用される*重要な注意点に注意してください。 – torek

関連する問題