523

削除したい古いブランチがあります。ただし、そうする前に、このブランチに対して行われたすべてのコミットが、ある時点で他のブランチにマージされたことを確認したいと思います。したがって、他のブランチに適用されていない現在のブランチに行われたすべてのコミットを確認したい [または、スクリプトなしでこれが不可能な場合は、適用されていない 1 つのブランチのすべてのコミットをどのように確認するのですか?別の特定のブランチに?]。

4

11 に答える 11

647

あるブランチにあるが別のブランチにないコミットのリストを表示するには、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
于 2010-11-17T17:15:42.310 に答える
346

あなたはおそらくただ欲しい

git branch --contains branch-to-delete

これにより、「branch-to-delete」からのコミットを含むすべてのブランチが一覧表示されます。"branch-to-delete" 以外のメッセージが表示された場合、そのブランチはマージされています。

あなたの代替案は、実際には rev-list 構文にすぎません。たとえば 、すべてが持つ必要がgit log one-branch..another-branchあるすべてを示します。one-branchanother-branch

また、何がどこにあるかを確認する方法としても興味があるかもしれませんgit show-branch

于 2009-11-10T20:26:28.560 に答える
113

newbranch ではなく oldbranch のコミットを表示するには:

git log newbranch..oldbranch

これらのコミットによる差分を表示するには (3 つのドットがあることに注意してください):

git diff newbranch...oldbranch

これは、図のイラストを含むドキュメントですhttps://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges

于 2014-02-21T12:25:03.727 に答える
68

簡単な答えをまだ探している人は、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
于 2015-10-14T23:38:36.760 に答える
51

ここに投稿された回答の一部は、探しているものを見つけるのに役立ちますが、次の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
于 2011-01-05T07:53:16.023 に答える
17

jimmyorr の回答は Windows では機能しません。--not代わりに次の^ように使用すると役立ちます。

git log oldbranch --not newbranch --no-merges
于 2015-06-18T08:59:09.527 に答える
8

チェックする必要があるのが1 つの (単一の)ブランチである場合、たとえば、ブランチ 'B' がブランチ 'A' に完全にマージされるようにする場合は、次の手順を実行するだけです。

$ git checkout A
$ git branch -d B

git branch -d <branchname>「ブランチはHEADに完全にマージする必要がある」という安全性があります。

注意: ブランチ B が A にマージされると、実際にはブランチ B が削除されます。

于 2009-11-10T22:00:19.317 に答える
3

この簡単なスクリプトを使用して、マージされていないコミットを確認できます

#!/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も使用できます

于 2012-05-30T13:22:58.897 に答える
0

現在のブランチにないコミットとコミットの内容を表示other-branchします。

git show @..other-branch

other-branchさらに、コミットを現在のブランチに直接適用できます。

git cherry-pick @..other-branch
于 2021-02-11T10:53:37.427 に答える