削除したい古いブランチがあります。ただし、そうする前に、このブランチに対するすべてのコミットが、ある時点で他のブランチにマージされたことを確認したいと思います。したがって、他のブランチに適用されていない、現在のブランチに対して行われたすべてのコミットを見たいのです。別のブランチに?].
あなたはたぶん欲しい
git branch --contains branch-to-delete
これは "branch-to-delete"からのコミットを含む全てのブランチをリストします。それが単なる "削除する分岐"以上のものを報告している場合、その分岐はマージされています。
あなたの選択肢は、実際には単なるrev-list構文のものです。例えばgit log one-branch..another-branch
は、one-branch
がanother-branch
をすべて持っているために必要なすべてを示しています。
何がどこにあるのかを知る方法としてgit show-branch
にも興味があるかもしれません。
どのコミットが1つのブランチにあるが別のブランチにはないかのリストを見るには、git logを使います。
git log --no-merges oldbranch ^newbranch
...つまり、oldbranch上のnot newbranch上のすべてのコミットのコミットログを表示します。含めたり除外したりするために複数のブランチをリストすることができます。
git log --no-merges oldbranch1 oldbranch2 ^newbranch1 ^newbranch2
注:Windowsでは^
はエスケープキーなので、別の^
でエスケープする必要があります。
git log --no-merges oldbranch ^^newbranch
コミットを古いブランチでは表示するが、新しいブランチでは表示しない
git log newbranch..oldbranch
これらのコミットによる差分を表示するには(3つのドットがあることに注意してください):
git diff newbranch...oldbranch
これがダイアグラムのイラスト付きのドキュメントです https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges
ここに掲載されている答えのいくつかはあなたが求めるものを見つけるのに役立ちますが、git branchの次のサブコマンドはあなたのタスクにもっと適した解決策です。
- mergedは、安全に削除できるブランチをすべて見つけるために使用されます。これらのブランチはHEADに完全に含まれているためです。
master
では、ブランチを列挙するコマンドを実行することができますが、次のように安全に削除できます。
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
まだ簡単な答えを探している人は、 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ハッシュと共に含めるためのものです。
先頭に '+'が付いている行は削除ブランチにありますが、マスターブランチにはありません。前に ' - 'があるものは、masterで同等のコミットをしています。
JUSTのためにマスターにないコミットは、grepとチェリーピックを組み合わせてください:
git cherry -v master | grep "^\+"
出力例
+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
jimmyorr's answer Windowsでは動きません。そのように--not
の代わりに^
を使うのを助けます:
git log oldbranch --not newbranch --no-merges
チェックする必要があるone(single) branchの場合、例えば、その分岐 'B'が完全に分岐 'A'にマージされるようにしたい場合は、次のようにします。
$ git checkout A
$ git branch -d B
git branch -d <branchname>
には「ブランチはHEADに完全にマージされなければならない」という安全性があります。
注意:これは実際にブランチBがAにマージされると削除します。
この単純なスクリプトを使用して、マージされていないコミットを確認できます。
#!/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 を使うこともできます。