Mostrar a diferença entre os commits

estou a utilizar Git emUbuntu 10.04 (Lince lúcido).

Fiz alguns compromissos com o meu mestre.

No entanto, quero obter a diferença entre estes commits. Todos eles estão no meu ramo principal.

por exemplo:

commit dj374
made changes

commit y4746
made changes

commit k73ud
made changes
Quero ver a diferença entre o k73ud e o dj374. No entanto, quando fiz o seguinte não pude ver as mudanças que fiz em k73ud.

git diff k73ud..dj374 > master.patch
 131
Author: Peter Mortensen, 2010-07-30

9 answers

Tenta

git diff k73ud^..dj374

Para ter a certeza de incluir todas as alterações de k73ud na diferença resultante.

git diff compara dois pontos finais (em vez de um intervalo de commit). Uma vez que o OP quer ver as alterações introduzidas por k73ud, ele/ela precisa de fazer a diferença entre o primeiro commit pai de k73ud: k73ud^ ( ou k73ud^1 ou k73ud~).

Assim, os resultados diff incluirão alterações uma vez que k73ud Pai (significado incluindo as alterações a partir de k73ud, em vez de alterações introduzidas desde k73ud (até dj374.

 133
Author: VonC, 2018-01-28 21:42:53

Para ver a diferença entre:

A sua área de trabalho e de preparação:

% git diff

Ponto de paragem e o último compromisso:

% git diff --staged

A sua cópia de trabalho e o compromisso 4ac0a6733:

% git diff 4ac0a6733

Commit 4ac0a6733 e a última commit:

% git diff 4ac0a6733 HEAD

Commit 4ac0a6733 e commit 826793951

% git diff 4ac0a6733 826793951

Para mais explicações, ver a documentação oficial.

 87
Author: Alex Yursha, 2018-01-28 21:44:15

Se quiser ver as alterações introduzidas em cada commit, tente "git log-p"

 43
Author: cxreg, 2010-07-30 07:45:12

Uso gitk para ver a diferença:

gitk k73ud..dj374
Tem um modo gráfico para que a revisão seja mais fácil.
 9
Author: user2647616, 2018-01-28 21:43:19
  1. gitk --all
  2. Seleccione a primeira persistência
  3. clique com o botão direito sobre o outro, então diff selecionado → este
 9
Author: geekbytes0xff, 2018-01-28 21:46:46

Para ver a diferença entre dois commits diferentes (vamos chamá-los a e b), use

git diff a..b
  • Note que a diferença entre a e b é oposta a b e a.

Para ver a diferença entre a sua última persistência e as alterações ainda não comprometidas, use

git diff

Se você quer ser capaz de voltar para a diferença mais tarde, você pode salvá-lo em um arquivo.

git diff a..b > ../project.diff
 5
Author: OxyDeadbeef, 2018-01-24 18:17:10

Eu escrevi um script que mostra diferenças entre dois commits, funciona bem no 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)
 2
Author: Jacob Abraham, 2018-07-05 11:50:10

Mais simples para verificar as alterações nos 2 últimos commits após puxar:

git diff HEAD~2 
 0
Author: Flowkap, 2018-09-14 10:13:10

Use este comando para a diferença entre persistência e instabilidade:

git difftool --dir-diff
 -1
Author: Annadurai, 2018-01-28 21:47:34