46

時々、次の問題があります。

  1. 機能ブランチにいくつかのコミットを追加します。

  2. アップストリームからマスターを更新します。

  3. 機能ブランチとマスターの差分を表示したいが、マスターでgit diff master追加/削除されたすべてのものを表示する.後ろに。

master を機能ブランチにマージせずにこれを行う方法はありますか?

4

5 に答える 5

68

正解はトリプルドットだと思います

git diff master...feature

これは、マスターに関する機能の新しい変更のみを示しています。参照: git diff - リモートの最新情報のみを表示する

于 2013-07-12T15:02:16.783 に答える
34

私は通常のために行きます

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
于 2013-07-11T23:57:50.283 に答える
27

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>featuremaster...feature...

コミット範囲の指定について詳しくは、Pro Git book を参照してください。

于 2013-07-12T00:02:57.877 に答える
0

私があなたの質問を正しく理解していれば、あなたの機能ブランチはマスター ブランチから離れており、機能ブランチでコミットした内容とマスター ブランチから分岐したときの違いを確認したいと考えています。

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`
于 2013-07-11T23:56:35.237 に答える