時々、次の問題があります。
機能ブランチにいくつかのコミットを追加します。
アップストリームからマスターを更新します。
機能ブランチとマスターの差分を表示したいが、マスターで
git diff master
追加/削除されたすべてのものを表示する.後ろに。
master を機能ブランチにマージせずにこれを行う方法はありますか?
時々、次の問題があります。
機能ブランチにいくつかのコミットを追加します。
アップストリームからマスターを更新します。
機能ブランチとマスターの差分を表示したいが、マスターでgit diff master
追加/削除されたすべてのものを表示する.後ろに。
master を機能ブランチにマージせずにこれを行う方法はありますか?
正解はトリプルドットだと思います
git diff master...feature
これは、マスターに関する機能の新しい変更のみを示しています。参照: git diff - リモートの最新情報のみを表示する
私は通常のために行きます
git log -p feature-branch --not master
しかし、差分が必要な場合は、探している
git diff <common-ancestor> master
where<common-ancestor>
は、比較対象の機能ブランチとマスターの共通の祖先です。を使用merge-base
して、それを見つけることができます。
git diff `git merge-base feature-branch master` feature-branch
master
との間の変更の差分/パッチを見feature
たいのか、それとも他のブランチにないコミットがどのブランチに含まれているのかを知りたいだけなのかわからないため、あなたの質問は少し不明確です。
feature
存在しないブランチにmaster
あるコミット (つまり、どのコミットfeature
が「先行」しているか)を確認したいだけだと仮定すると、次のmaster
ことができます。
$ git log --oneline --graph master..feature
master
との両方がどのように分岐したかを確認したい場合はfeature
、次のコマンドを使用できます。
$ git log --oneline --graph --first-parent \
--decorate --left-right master...feature
> 5bef654 (feature) A ...
> f7c65ea B ...
> fc66245 C ...
> 7435fc0 D ...
< bf68204 (master) X ...
< 0c10ed1 Y ...
< 27bb774 Z ...
上記の出力は、(コマンドの左側で masterを使用したため) の前にmaster
ないコミットfeature
を示していますが、 master にないコミットは、の右側で使用したため、でマークされています。 . このフォームの 3 つのドットは重要です。省略しないでください。<
master...feature
<
feature
>
feature
master...feature
...
コミット範囲の指定について詳しくは、Pro Git book を参照してください。
私があなたの質問を正しく理解していれば、あなたの機能ブランチはマスター ブランチから離れており、機能ブランチでコミットした内容とマスター ブランチから分岐したときの違いを確認したいと考えています。
A----B----C
\
D----E----F
git diff
その場合、コミットの対応するハッシュでコマンドを使用できます。したがって、ポイント A で分岐し、その後 D、E、および F をコミットしたフィーチャー ブランチの場合、次のようにすることができます。
git diff <hash of commit F> <hash of commit A>
を使用git merge-base feature master
して、上記で使用するポイント A のハッシュをgit log
表示したり、機能ブランチでの最新のコミット F のハッシュを表示したりできます。または、すべてを 1 行で実行するには、次のコマンドを使用します。
git diff feature `git merge-base feature master`