365

Ubuntu 10.04(Lucid Lynx)でGitを使用しています。

私は私のマスターにいくつかのコミットをしました。

ただし、これらのコミットの違いを確認したいと思います。それらはすべて私のマスターブランチにあります。

例えば:

commit dj374
made changes

commit y4746
made changes

commit k73ud
made changes

k73udとdj374の違いを知りたい。しかし、次のことを行ったとき、で行った変更を確認できませんでしたk73ud

git diff k73ud..dj374 > master.patch
4

14 に答える 14

423

試す

git diff k73ud^..dj374

k73ud結果のdiffにのすべての変更を含めるようにします。

git diff2つのエンドポイントを比較します(コミット範囲の代わりに)。OPは、によって導入された変更を確認したいので、:(またはまたは)の最初の親コミットk73udを区別する必要があります。k73udk73ud^k73ud^1k73ud~

そうすれば、diff結果には、 (まで)以降に導入された変更ではなく、親以降 の変更(それ自体からの変更を含む)が含まれます。k73udk73ud k73uddj374

また、試すことができます:

git diff oldCommit..newCommit
git diff k73ud..dj374 

および(1スペース、それ以上ではありません):

git diff oldCommit newCommit
git diff k73ud dj374

また、ファイル名のみを取得する必要がある場合(たとえば、修正プログラムを手動でコピーする場合):

git diff k73ud dj374 --name-only

また、変更を別のブランチに適用することができます。

git diff k73ud dj374 > my.patch
git apply my.patch
于 2010-07-30T04:47:43.963 に答える
159

の違いを確認するには:

作業コピーとステージング領域:

% git diff

ステージングエリアと最新のコミット:

% git diff --staged

作業コピーとコミット4ac0a6733:

% git diff 4ac0a6733

4ac0a6733と最新のコミットをコミットします。

% git diff 4ac0a6733 HEAD

4ac0a6733をコミットし、826793951をコミットします

% git diff 4ac0a6733 826793951

詳細については、公式ドキュメントを参照してください。

于 2015-03-31T17:10:59.417 に答える
65

各コミットで導入された変更を確認したい場合は、「gitlog-p」を試してください

于 2010-07-30T07:45:12.540 に答える
14
  1. gitk --all
  2. 最初のコミットを選択します
  3. もう一方を右クリックして、選択した差分→これ
于 2016-02-11T04:59:34.823 に答える
11

2つの異なるコミットの違いを確認するには(それらaをとと呼びましょうb)、

git diff a..b
  • aとの違いbはととは反対であることに注意しbてくださいa

最後のコミットとまだコミットされていない変更の違いを確認するには、

git diff

後で違いに戻れるようにしたい場合は、ファイルに保存できます。

git diff a..b > ../project.diff
于 2015-09-20T22:31:21.327 に答える
10

gitkは違いを見るために使用します:

gitk k73ud..dj374

GUIモードを備えているため、レビューが簡単です。

于 2013-08-03T00:06:39.700 に答える
8

プル後の最後の2つのコミットの変更をチェックするための最も簡単な方法:

git diff HEAD~2 
于 2018-09-14T10:13:10.893 に答える
4

2つのコミット間の差分を表示するスクリプトを作成しました。Ubuntuでうまく機能します。

https://gist.github.com/jacobabrahamb4/a60624d6274ece7a0bd2d141b53407bc

#!/usr/bin/env python
import sys, subprocess, os

TOOLS = ['bcompare', 'meld']

def execute(command):
    return subprocess.check_output(command)

def getTool():
    for tool in TOOLS:
        try:
            out = execute(['which', tool]).strip()
            if tool in out:
                return tool
        except subprocess.CalledProcessError:
            pass
    return None

def printUsageAndExit():
    print 'Usage: python bdiff.py <project> <commit_one> <commit_two>'
    print 'Example: python bdiff.py <project> 0 1'
    print 'Example: python bdiff.py <project> fhejk7fe d78ewg9we'
    print 'Example: python bdiff.py <project> 0 d78ewg9we'
    sys.exit(0)

def getCommitIds(name, first, second):
    commit1 = None
    commit2 = None
    try:
        first_index = int(first) - 1
        second_index = int(second) - 1
        if int(first) < 0 or int(second) < 0:
            print "Cannot handle negative values: "
            sys.exit(0)
        logs = execute(['git', '-C', name, 'log', '--oneline', '--reverse']).splitlines()
        if first_index >= 0:
            commit1 = logs[first_index].split(' ')[0]
        if second_index >= 0:
            commit2 = logs[second_index].split(' ')[0]
    except ValueError:
        if first is not '0':
            commit1 = first
        if second is not '0':
            commit2 = second
    return commit1, commit2

def validateCommitIds(name, commit1, commit2):
    if not commit1 and not commit2:
        print "Nothing to do, exit!"
        return False
    try:
        if commit1:
            execute(['git', '-C', name, 'cat-file', '-t', commit1])
        if commit2:
            execute(['git', '-C', name, 'cat-file', '-t', commit2])
    except subprocess.CalledProcessError:
        return False
    return True

def cleanup(commit1, commit2):
        execute(['rm', '-rf', '/tmp/'+(commit1 if commit1 else '0'), '/tmp/'+(commit2 if commit2 else '0')])

def checkoutCommit(name, commit):
    if commit:
        execute(['git', 'clone', name, '/tmp/'+commit])
        execute(['git', '-C', '/tmp/'+commit, 'checkout', commit])
    else:
        execute(['mkdir', '/tmp/0'])

def compare(tool, commit1, commit2):
        execute([tool, '/tmp/'+(commit1 if commit1 else '0'), '/tmp/'+(commit2 if commit2 else '0')])

if __name__=='__main__':
    tool = getTool()
    if not tool:
        print "No GUI diff tools, install bcompare or meld"
        sys.exit(0)
    if len(sys.argv) is not 4:
        printUsageAndExit()

    name, first, second = None, 0, 0
    try:
        name, first, second = sys.argv[1], sys.argv[2], sys.argv[3]
    except IndexError:
        printUsageAndExit()

    commit1, commit2 = getCommitIds(name, first, second)

    if validateCommitIds(name, commit1, commit2) is False:
        sys.exit(0)

    cleanup(commit1, commit2)

    try:
        checkoutCommit(name, commit1)
        checkoutCommit(name, commit2)
        compare(tool, commit1, commit2)
    except KeyboardInterrupt:
        pass
    finally:
        cleanup(commit1, commit2)
    sys.exit(0)
于 2018-07-02T15:25:00.337 に答える
3

受け入れられた答えは良いです。

ここにもう一度置くだけなので、理解しやすく、将来的に試すことができます

git diff c1...c2 > mypatch_1.patch  
git diff c1..c2  > mypatch_2.patch  
git diff c1^..c2 > mypatch_3.patch  

上記のすべてのコマンドで同じ差分を取得しました。


上記は、 1。commitc1と別のcommitc2の違いを確認するのに役立ちます
。2。diffを示し、別のブランチに変更を適用するために使用できるパッチファイルも作成します。

違いが正しく表示されない場合は
、c1とc2が間違っている可能性がある
ため、c1からc0のようにコミットする前、またはc2からc3のようにコミットする前に調整します。

コミットSHAを確認するために使用gitkします。最初の8文字で、c0、c1、c2、またはc3として使用できます。Gitlab>リポジトリ>コミットなどからコミットIDを確認することもできます。

お役に立てば幸いです。

于 2020-05-03T13:07:06.107 に答える
3

私はいつもコマンドラインを使うのが大好きで、ユーザーフレンドリーなツール(GUI付き)を手元に持っています。両方の長所。これが、Gitの2つのコミットを比較する方法です。

次のように、2つのコミット間の差分を表示できます。

テキストエディタでgit設定ファイルを編集します。

git config --global -e 

WindowsでGit構成ファイルに次のようにMeldのような適切なdiffツール(ユーザーフレンドリー)を設定します。

[difftool "meld"]
cmd = "C:/Program Files (x86)/Meld/Meld.exe" "LOCAL\" \"REMOTE" --label "DIFF (ORIGINAL MY)"
prompt = false
path = C:\Program Files (x86)\Meld\Meld.exe

Meldは、コマンドラインから次のようにChocolateyを使用してインストールできます。

choco install meld

テキストエディタの[エイリアス]の下にある2つのsha-s(コミット)を比較するのに役立つシェル関数を定義しましょう。

[alias]
showchangesbetween = "!w() { git difftool \"$1\" \"$2\" --dir-diff --ignore-all-space; }; w"

Meld(または他のお気に入りのdiffツール)を使用してコミットを比較するには、コマンドラインで次のように入力します。

git showchangesbetween somesha123 somesha456

コミットsha-sはタイピングで簡単に見ることができます

 git log 

例えば。

于 2020-12-09T22:39:26.590 に答える
2
 1. git diff <commit-id> <commit-id>
 2. git diff HEAD^ HEAD     -(HEAD = current branch’s tip),( HEAD^ = version before the last commit)
 3. git diff HEAD^ HEAD — ./file     (comparison to specified file)
 4. git diff HEAD~5 HEAD           - (HEAD~5 refers to the last 5 commits.)
于 2021-06-07T16:33:13.410 に答える
1

以下のコマンドは、Ubuntu20.04およびgitv2.25.1で完全に機能します。

git diff <base-commit-id> <target-commit-id>
于 2021-03-03T10:37:25.760 に答える
0

一番下(最も古い)にもう1つのコミットがあるとすると、これは非常に簡単になります。

commit dj374
made changes

commit y4746
made changes

commit k73ud
made changes

commit oldestCommit
made changes

さて、以下を使用すると、目的を簡単に実行できます。

git diff k73ud oldestCommit
于 2019-01-29T23:55:18.160 に答える
-2

commitとunstagedの違いについては、次のコマンドを使用してください。

git difftool --dir-diff
于 2017-06-06T13:44:41.457 に答える