削除したい古いブランチがあります。ただし、その前に、このブランチに対して行われたすべてのコミットが、ある時点で他のブランチにマージされたことを確認したいと思います。したがって、他のブランチに適用されていない現在のブランチに対して行われたすべてのコミットを見たいと思います[または、スクリプトなしでこれが不可能な場合、適用されていない1つのブランチ内のすべてのコミットをどのように確認しますか?別の与えられたブランチに?]。
削除したい古いブランチがあります。ただし、その前に、このブランチに対して行われたすべてのコミットが、ある時点で他のブランチにマージされたことを確認したいと思います。したがって、他のブランチに適用されていない現在のブランチに対して行われたすべてのコミットを見たいと思います[または、スクリプトなしでこれが不可能な場合、適用されていない1つのブランチ内のすべてのコミットをどのように確認しますか?別の与えられたブランチに?]。
回答:
あなたはおそらくただ欲しい
git branch --contains branch-to-delete
これは、「branch-to-delete」からのコミットを含むすべてのブランチをリストします。「ブランチから削除」以上のものを報告する場合、ブランチはマージされています。
あなたの選択肢は、実際には単にrev-list構文のものです。たとえば git log one-branch..another-branch
、すべてone-branch
を持っている必要があるすべてを示していますanother-branch
。
git show-branch
何がどこにあるかを確認する方法としても興味があるかもしれません。
git branch --contains some-branch
にのみ戻りsome-branch
、それはリターン何かをするが、それはしていないマージされて。
git log foo..bar
は、barの最新とfooの最新の間のコミットを表示しますが、それより前の時点で欠落している他のコミットは表示しないことに注意してください。fooではなくbarですべてを表示するには、@ jimmyorrのソリューションを使用する必要があります。
あるブランチにあり、別のブランチにないコミットのリストを表示するには、git logを使用します。
git log --no-merges oldbranch ^newbranch
...つまり、newbranchにない oldbranch上のすべてのコミットのコミットログを表示します。複数のブランチをリストして、含めたり除外したりできます。例えば
git log --no-merges oldbranch1 oldbranch2 ^newbranch1 ^newbranch2
注:Windowsでは^
エスケープキーであるため、別のキーでエスケープする必要があります^
。
git log --no-merges oldbranch ^^newbranch
^
ここで接頭辞として使用すると混乱しました。このコンテキストでは、そのブランチを除外することを意味します。^
サフィックスとして使用すると、そのブランチの親コミットへの相対参照になります。
gitk oldbranch ^newbranch --no-merges
(git 1.8.1.1でテスト済み)を使用します。サイドノート、私にとって^
はブランチの包括的なヘッドコミットを意味しnewbranch
ます。
oldbranchではコミットを表示し、newbranchではコミットを表示しないようにするには:
git log newbranch..oldbranch
これらのコミットで差分を表示するには(3つのドットがあることに注意してください):
git diff newbranch...oldbranch
これは、図のイラスト付きのドキュメントですhttps://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges
newbranch
かoldbranch
を使用しているgit log ..oldbranch
場合は、git log newbranch..
それぞれを実行できます
..
は、refsの名前の間にある2つのドットのおかげでうまくいきました。また--cherry-pick
、両方のブランチに存在するが、ハッシュが異なるコミットを非表示にするオプションを使用しました。これらのコミットは、一方のブランチから他方のブランチに厳選されたためです。
まだ簡単な答えを探している人は、git cherryをチェックしてください。コミットハッシュの代わりに実際の差分を比較します。つまり、チェリーピックまたはリベースされたコミットに対応します。
まず、削除するブランチをチェックアウトします。
git checkout [branch-to-delete]
次にgit cherryを使用して、メインの開発ブランチと比較します。
git cherry -v master
出力例:
+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
- 85867e38712de930864c5edb7856342e1358b2a0 Yet another message
注: -v
フラグは、SHAハッシュとともにコミットメッセージを含めることです。
「+」が前にある行は削除するブランチにありますが、マスターブランチにはありません。前に「-」が付いているものは、マスターで同等のコミットがあります。
マスターにないコミットだけのために、チェリーピックとgrepを組み合わせます:
git cherry -v master | grep "^\+"
出力例:
+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
diff
ユーティリティを使用してさまざまなファイルを比較することもできます。または、一時的なブランチを作成して、元のブランチで行ったのと同じように、すべてのコミットを押しつぶして、これを使用することもできます。
ここに投稿された回答のいくつかはあなたが探しているものを見つけるのに役立ちますが、gitブランチの次のサブコマンドは、あなたのタスクにより適したソリューションです。
--mergedは、HEADに完全に含まれているため、安全に削除できるすべてのブランチを見つけるために使用されます。
滞在中master
1 1が安全にそうように、取り外し可能性が枝を列挙するためにコマンドを実行できます。
git branch --merged
develop
fpg_download_links
* master
master_merge_static
# Delete local and remote tracking branches you don't want
git branch -d fpg_download_links
git push origin :fpg_download_links
git branch -d master_merge_static
git push origin :master_merge_static
# There is also a flag to specify remote branches in the output
git branch --remotes --merged
jimmyorrの回答はWindowsでは機能しません。そうでは--not
なく代わりに使用すると役立ちます^
:
git log oldbranch --not newbranch --no-merges
^
はWindowsでサポートされていますが、エスケープする必要があることに注意してください。これは、Windowsでは(別の)^
ですgit log oldbranch ^^newbranch --no-merges
。
確認する必要がある1つの(単一の)ブランチである場合、たとえば、ブランチ 'B'がブランチ 'A'に完全にマージされるようにする場合は、次のようにするだけです。
$ git checkout A
$ git branch -d B
git branch -d <branchname>
「ブランチをHEADに完全にマージする必要がある」という安全性があります。
注意:これは、ブランチBがAにマージされた場合、実際にはブランチBを削除します。
この簡単なスクリプトを使用して、マージされていないコミットを確認できます
#!/bin/bash
# Show commits that exists only on branch and not in current
# Usage:
# git branch-notmerge <branchname>
#
# Setup git alias
# git config alias.branch-notmerge [path/to/this/script]
grep -Fvf <(git log --pretty=format:'%H - %s') <(git log $1 --pretty=format:'%H - %s')
ブランチの状態を表示するツールgit-wtfも使用できます