480 Stimmen

Unterschied zwischen Übertragungen anzeigen

Ich verwende Git auf Ubuntu 10.04 (Lucid Lynx).

Ich habe einige Übertragungen an meinem Master vorgenommen.

Ich möchte jedoch den Unterschied zwischen diesen Übertragungen ermitteln. Alle von ihnen sind auf meinem Master-Zweig.

Zum Beispiel:

commit dj374
made changes

commit y4746
made changes

commit k73ud
made changes

Ich möchte den Unterschied zwischen k73ud und dj374 herausfinden. Als ich jedoch das Folgende tat, konnte ich die Änderungen, die ich in k73ud .

git diff k73ud..dj374 > master.patch

13voto

user2647616 Punkte 101

Ich benutze gitk um den Unterschied zu erkennen:

gitk k73ud..dj374

Es verfügt über einen GUI-Modus, der das Überprüfen erleichtert.

12voto

Flowkap Punkte 649

Am einfachsten ist es, die Änderungen in den letzten 2 Commits nach dem Pull zu überprüfen:

git diff HEAD~2

10voto

Ritu Gupta Punkte 1755
 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.)

4voto

Jacob Abraham Punkte 905

Ich habe ein Skript geschrieben, das den Unterschied zwischen zwei Commits anzeigt; es funktioniert gut unter 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)

4voto

Tore Aurstad Punkte 2499

Ich benutze immer gerne die Kommandozeile und habe benutzerfreundliche Tools (mit GUI) zur Hand. Das Beste aus beiden Welten. So gehe ich vor, um zwei Übertragungen in Git zu vergleichen.

Sie können den Unterschied zwischen zwei Übertragungen wie folgt anzeigen.

Bearbeiten Sie Ihre Git-Konfigurationsdatei in einem TEXTEDITOR:

git config --global -e 

Richten Sie in der Git-Konfigurationsdatei ein geeignetes (benutzerfreundliches) Vergleichstool wie Meld ein, das unter Windows so funktioniert:

[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 kann mit Chocolatey wie folgt über die COMMAND LINE installiert werden:

choco install meld

Definieren wir eine Shell-Funktion, mit der wir zwei sha-s (commits) unter [alias] im TEXT EDITOR vergleichen können:

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

Um die Commits mit Hilfe von Meld (oder Ihrem anderen bevorzugten Diff-Tool) zu vergleichen, geben Sie einfach auf der COMMAND LINE ein:

git showchangesbetween somesha123 somesha456

Die Commit Sha-s sind leicht zu erkennen, wenn man

 git log 

zum Beispiel.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X