2017-03-01 11 views

答えて

0

あなたが欲しいものを達成する必要がありgit branch --merged

これを実行していないマージされていないコミットされたすべての枝を、見ることができます。コミットのない新しく作成されたブランチは、マージされた古いブランチとまったく変わりません。

+0

* --mergedを指定すると、指定されたコミットにブランチのみがマージされます(つまり、指定されたコミットからアクセス可能な分岐を持つブランチ)。* – RomanPerekhrest

+0

そのコマンドが私の出発点です。しかし、私たちのワークフローでは、何もコミットしていないブランチを持つことは非常に一般的です(すべてのフィーチャーブランチの開始方法です)。私は、統合されたブランチからそれらのブランチを分離して開発したいと考えています。 –

0

質問の意味はわかりません。

ここは簡単な例です。このグラフを描画すると仮定します。

...--o--o--o--o <-- master 
     \ 
      o--X <-- br1, br2 

masterは、チップコミットを指しています。ブランチbr1br2はどちらも独自のtipコミットを指していますが、どちらのコミットもコミットXです。その意味で、これらのブランチ名の少なくとも1つは冗長です。

さて、あなたは言った:新しく

それはリモート追跡ブランチ名を見つけるのは簡単だ作成された私のリモコンの

支店:彼らはrefs/remotes/名前空間でのものです。 originというリモートのものはrefs/remotes/origin/です。

しかし、 "新しく作成された"というのはGitでは意味がありません。ブランチ名はいつでも作成または破棄でき、コミットを指し示します。これまでに描画されたグラフが与えられた場合、Xの前にコミットを指す新しいbr3を追加できます。我々はoriginにそれを行うと、その後git fetchを実行すると、我々が得る:

...--o--o--o--o <-- master 
     \ 
      o  <-- origin/br3 
      \ 
      X  <-- br1, br2 
これは本当に同じ ある

グラフを犯します。私はちょうどXを新しい行に移動したので、名前に入るスペースがあった。origin/br3。それはにならないよう、私たち自身のbr1br2名の両方を持つ冗長意味で、origin/br3 -isを品名 -

は、我々はすでに保持しないでしょうコミットを保持します。しかし、とは異なります。

git branchオプション--contains--merged、および--no-mergedgit for-each-refで利用できるようになりました同様に、Gitの2.7.0以降)でまさに上のいくつかのバリエーションで、「あるか祖先ではない」ため、単にエン一斉テストですwhat-elseに対してテストされています。バックこのグラフに行くが、より多くの名前を追加:

...--U--V--Y--Z <-- master 
     \ 
      W--X <-- br1, br2 

グラフはUがコミットラベルされた他のすべての祖先であることを教えてくれる、YWがそうでXの祖先である、そして、Zの祖先です。WYない祖先である、しかし、「後方」のリンクのみのノードをコミット-leftwardsとして、これらのグラフ図面-のでWに戻っVに行き、YはバックVになりますが、でWY接続しませんすべて。

これらの "祖先です"テストの場合、コミットは常に自分自身の祖先とみなされます。つまり、これらは厳密にはより小さい値ではなく、以下である。

実行中:git branch --contains <id>コミットを意味する:各ブランチ名について、そのヒントを調べる。 (ZX、次にX)再度、名前付きコミット<id>がヒントの祖先であるかどうかを確認します。その場合は、ブランチ名を出力してください。したがって、コミットをUとすれば、すべてのブランチ名が得られますが、コミットをXとすれば、br1br2になります。

実行中git branch --merged [<commit>]は、各ブランチ名に対して、そのチップコミットを参照することを意味します。 (Z,、およびX)。次に、tipコミットが先ほどコミットしたコミットの祖先であるかどうかを確認します。名前を付けなかった場合はHEADです。その場合は、そのブランチ名を出力します。したがって、今すぐコミットする場合はXbr1br2が表示されます。ただし、Uという名前を付けると、ZXUの祖先ではないため、にはというブランチ名が付けられます。

実行中git branch --no-merged [<commit>]は、各ブランチ名に対して、そのチップコミットを参照することを意味します。次に、tipコミットが、先ほど指名したコミットの先祖か、HEADかを確認します。 でない場合は、ブランチ名を印刷します。

また、これらはすべて単純な "祖先である"テストであり、git branchはすべてのブランチ名に対して単純に実行します。 --contains--merged、および--no-merged制御:

≤祖先テストの左右に行くハッシュをコミット
  • "yes"または "no"の結果がブランチ名を出力するかどうか。

は(テストが「ノー」。そのために、手動でループを綴るする必要があると言う場合にのみ、何--does-not-contain左側の引数のハッシュ-IDを置くためのテストが、印刷はありません。)

関連する問題