gitのブランチ間のコミットの違いを確認するにはどうすればよいですか?


341

私はブランチXを使用しており、その上にさらにいくつかのコミットを追加しています。コミットに関して、MASTERとブランチの違いをすべて確認したい。私はただすることができました

git checkout master
git log

そして次に

git checkout branch-X
git log

これらを視覚的に比較しますが、簡単でエラーが発生しにくい方法を期待しています。


回答:


324

これにより、ブランチがどのように異なるかについて、非常に優れた視覚的な出力を得ることができます

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative master..branch-X

13
しかし、ブランチ間の違いは表示されませんが、それが求められていることです。
Pablo Fernandezヒールフック2012

47
git log --oneline --graph --all --decorate --abbrev-commit同じような出力が、より短い/より読みやすいコマンドで表示されます
Pablo Fernandez heelhook 12/12/20

4
私はこれが好きです:git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'
Avery

6
非常に複雑すぎる。
Shawn Erquhart、2015年

12
git log --oneline --graph --all --decorate十分--abbrev-commitです、必須で--onelineはありません、省略形です--pretty=oneline --abbrev-commit
avmohan '19年

720

あなたはそれを簡単に行うことができます

git log master..branch-X

これにより、ブランチXにはあるがマスターにはないコミットが表示されます。


9
両方のブランチにコミットが含まれていて、他のブランチには含まれていない場合のオプションはありますか?現時点では、他のブランチに含まれていないコミットを確認するには、引数を反転して両方の方法で実行する必要があります。
Elliott Slaughter

38
既に切り替えたbranch-X場合は、次の方法を使用できますgit log master..
Dave

8
@ElliottSlaughter:マスターまたはブランチXのいずれかであり、両方ではないコミットを検索する場合はgit log master...branch-X、2つではなく3つのドットを使用できます。詳細についてはman gitrevisions、を参照してください。
Xavier T.

3
それは本当に答えの半分だけです。ブランチを分岐させるマスターでのコミットは表示されません
jterm

9
コミットがブランチXからチェリーピックされてマスターされている場合、これはそれらを除外しません。彼らはまだ...彼らは両方に実際にあるにもかかわらず、「ブランチ-Xではなく、マスターの」コミットのリストになります
Tuffwer

87

選択とコンテキストの問題だと思います。

git log origin/master..origin/develop --oneline --no-merges

マスターブランチにない開発中のコミットが表示されます。

実際に変更されているファイルを確認したい場合

git diff --stat origin/master..origin/develop --no-merges

引数を指定しない場合は、完全な差分が表示されます。差分を表示したい場合はmeld、LinuxまたはWinMergeWindowsにインストールしてください。それらがデフォルトのdifftoolsであることを確認してください。

git difftool -y origin/master..origin/develop --no-merges

現在のブランチと比較したい場合。次のようにブランチ名の代わりにHEADを使用する方が便利です。

git fetch
git log origin/master..HEAD --oneline --no-merges

マージされようとしているすべてのコミットが表示されます


1
マージされている可能性のあるリリースブランチを比較する場合。あなたはPARAMの助けを借りて(任意の値を追加しない)マージコミットを削除するようなことがあり--no-mergesように:git log origin/master..HEAD --oneline --no-merges
claudiu.f.marginean

15

Linuxを使用している場合は、gitgこれを非常に迅速かつグラフィカルに行う方法です。

あなたがコマンドラインを主張するなら、あなたは使うことができます:

git log --oneline --decorate

git logデフォルトでより快適にするために、私は通常これらのグローバル設定を設定します:

git config --global log.decorate true
git config --global log.abbrevCommit true

14

「コミット」の違いを確認するには、以下をお勧めします。対称の違いについては、反転した引数を使用してコマンドを繰り返します。

git cherry -v master [your branch, or HEAD as default]

これはgit master..branch-Xとは異なりますか?
イルミロン

2
確かに、「git cherry」はスマートです。「コミット」から「パッチ/差分」に変換され、両方のブランチにあるが異なる順序で適用される「パッチ」の報告を回避できます。
mmaruska

8

gitkを使用する場合:

gitk master..branch-X

それは素敵な古い学校GUiを持っています


4

完璧な答えではありませんが、Githubを使用している人にとってはうまく機能します

ここに画像の説明を入力してください

リポジトリに移動します。 Insights -> Network


また、プルリクエストを作成すると、ブランチの違いも表示されます。
pkamb 2017

OMG私はあなたを抱きしめたいです。
esseara

@esseara私も大きなハガーです:))どういたしまして:D
AIon

2

コミットメッセージに基づいて比較する場合は、以下を実行できます。

git fetch
git log --oneline origin/master | cut -d' ' -f2- > master_log
git log --oneline origin/branch-X | cut -d' ' -f2- > branchx_log
diff <(sort master_log) <(sort branchx_log)

1
使用--onelineしてパイピングする代わりに使用cutできますgit log --format='%s'
opticyclic

0
#! /bin/bash
if ((2==$#)); then
  a=$1
  b=$2
  alog=$(echo $a | tr '/' '-').log
  blog=$(echo $b | tr '/' '-').log
  git log --oneline $a > $alog
  git log --oneline $b > $blog
  diff $alog $blog
fi

これは、視覚的な差分ツールがある場合、aとbのログを並べて視覚的に比較できるためです。末尾のdiffコマンドを、ビジュアルdiffツールを開始するコマンドに置き換えます。


0

私はいくつかの回答を使用し、私のケースに合うものを見つけました(すべてのタスクがリリースブランチにあることを確認してください)。

他の方法も同様に機能しますが、値を追加しないマージコミットなど、不要な行を追加する可能性があることがわかりました。

git fetch
git log origin/master..origin/release-1.1 --oneline --no-merges

または、現在とマスターを比較できます

git fetch
git log origin/master..HEAD --oneline --no-merges

git fetch 更新された情報を使用していることを確認するためにあります。

このようにして、各コミットは1行になり、それをコピーしてテキストエディターに貼り付け、マージされるコミットとタスクの比較を開始できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.