削除したい古いブランチがあります。ただし、そうする前に、このブランチに対して行われたすべてのコミットが、ある時点で他のブランチにマージされたことを確認したいと思います。したがって、他のブランチに適用されていない現在のブランチに行われたすべてのコミットを確認したい [または、スクリプトなしでこれが不可能な場合は、適用されていない 1 つのブランチのすべてのコミットをどのように確認するのですか?別の特定のブランチに?]。
11 に答える
あるブランチにあるが別のブランチにないコミットのリストを表示するには、git log を使用します。
git log --no-merges oldbranch ^newbranch
...つまり、newbranch にないoldbranch のすべてのコミットのコミット ログを表示します。含めたり除外したりする複数のブランチをリストできます。
git log --no-merges oldbranch1 oldbranch2 ^newbranch1 ^newbranch2
注: Windows コマンド プロンプト (Powershell ではない)^
ではエスケープ キーであるため、別の でエスケープする必要があります^
。
git log --no-merges oldbranch ^^newbranch
あなたはおそらくただ欲しい
git branch --contains branch-to-delete
これにより、「branch-to-delete」からのコミットを含むすべてのブランチが一覧表示されます。"branch-to-delete" 以外のメッセージが表示された場合、そのブランチはマージされています。
あなたの代替案は、実際には rev-list 構文にすぎません。たとえば 、すべてが持つ必要がgit log one-branch..another-branch
あるすべてを示します。one-branch
another-branch
また、何がどこにあるかを確認する方法としても興味があるかもしれませんgit show-branch
。
newbranch ではなく oldbranch のコミットを表示するには:
git log newbranch..oldbranch
これらのコミットによる差分を表示するには (3 つのドットがあることに注意してください):
git diff newbranch...oldbranch
これは、図のイラストを含むドキュメントですhttps://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges
簡単な答えをまだ探している人は、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 ハッシュと共にコミット メッセージを含めることです。
前に「+」が付いている行は削除するブランチにありますが、マスター ブランチにはありません。前に「-」が付いているものは、マスターに同等のコミットがあります。
マスターにないコミットのみについては、cherry pick と grep を組み合わせます。
git cherry -v master | grep "^\+"
出力例:
+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
ここに投稿された回答の一部は、探しているものを見つけるのに役立ちますが、次の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
jimmyorr の回答は Windows では機能しません。--not
代わりに次の^
ように使用すると役立ちます。
git log oldbranch --not 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も使用できます
現在のブランチにないコミットとコミットの内容を表示other-branch
します。
git show @..other-branch
other-branch
さらに、コミットを現在のブランチに直接適用できます。
git cherry-pick @..other-branch