web-dev-qa-db-fra.com

Afficher les différences entre les commits

J'utilise Git sur Ubuntu 10.04 (Lucid Lynx).

J'ai fait des commits à mon maître.

Cependant, je veux faire la différence entre ces commits. Tous sont sur ma branche principale.

Par exemple:

commit dj374
made changes

commit y4746
made changes

commit k73ud
made changes

Je veux faire la différence entre k73ud et dj374. Cependant, lorsque j'ai fait ce qui suit, je ne pouvais pas voir les modifications apportées dans k73ud.

git diff k73ud..dj374 > master.patch
145
ant2009

Essayer

git diff k73ud^..dj374

pour vous assurer d'inclure toutes les modifications de k73ud dans le diff résultant.

git diff compare deux points de terminaison ( au lieu d'une plage de validation ) . Comme le PO veut voir les modifications introduites par k73ud, il doit différencier le premier commit parent de k73ud: k73ud^ (ou k73ud^1 OU k73ud~ ).

De cette façon, les résultats de diff incluront les modifications depuisk73ud parent (ce qui inclut les modifications apportées depuis k73ud lui-même), au lieu des modifications introduites depuisk73ud (jusqu'à dj374).

Aussi, vous pouvez essayer:

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

et (1 espace, pas plus):

git diff oldCommit newCommit
git diff k73ud dj374

Et si vous devez obtenir uniquement les noms de fichiers (par exemple, pour les copier manuellement, corrigez-les):

git diff k73ud dj374 --name-only

Et vous pouvez obtenir des modifications appliquées à une autre branche:

git diff k73ud dj374 > my.patch
git apply my.patch
156
VonC

Pour voir la différence entre:

Votre copie de travail et votre espace de travail:

% git diff

Zone de transit et le dernier commit:

% git diff --staged

Votre copie de travail et commettez 4ac0a6733:

% git diff 4ac0a6733

Commit 4ac0a6733 et le dernier commit:

% git diff 4ac0a6733 HEAD

Commit 4ac0a6733 et commet 826793951

% git diff 4ac0a6733 826793951

Pour plus d'explications, voir la documentation officielle .

97
Alex Yursha

Si vous voulez voir les modifications introduites avec chaque commit, essayez "git log -p"

45
cxreg
  1. gitk --all
  2. Sélectionnez le premier commit
  3. Faites un clic droit sur l'autre, puis diff sélectionné → this
10
geekbytes0xff

J'utilise gitk pour voir la différence:

gitk k73ud..dj374

Il a un mode graphique, ce qui facilite la révision.

10
user2647616

Pour voir la différence entre deux commits différents (appelons-les a et b), utilisez

git diff a..b
  • Notez que la différence entre a et b est opposée à b et a.

Pour voir la différence entre votre dernière validation et les modifications non encore validées, utilisez

git diff

Si vous voulez pouvoir revenir à la différence plus tard, vous pouvez l'enregistrer dans un fichier.

git diff a..b > ../project.diff
6
OxyDeadbeef

J'ai écrit un script qui affiche diff entre deux commits, fonctionne bien sur 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)
3
Jacob Abraham

Le plus simple pour vérifier les modifications dans les 2 derniers commits après extraction: 

git diff HEAD~2 
1
Flowkap

Disons que vous avez un autre commit en bas (le plus ancien), alors cela devient assez facile:

commit dj374
made changes

commit y4746
made changes

commit k73ud
made changes

commit oldestCommit
made changes

Maintenant, utiliser ci-dessous servira facilement le but.

git diff k73ud oldestCommit
0
bit_cracker007