Показать разницу между коммитами
Я использую Git on Ubuntu 10.04 (Осознанные Рысь).
Я сделал некоторые обязательства перед моим мастером.
однако, я хочу получить разницу между этими коммитами. Все они находятся на моей ветке master.
например:
commit dj374
made changes
commit y4746
made changes
commit k73ud
made changes
Я хочу получить разницу между k73ud и dj374. Однако, когда я сделал следующее Я не мог видеть изменения, которые я сделал в k73ud
.
git diff k73ud..dj374 > master.patch
9 ответов:
попробовать
git diff k73ud^..dj374
чтобы включить все изменения
k73ud
в результате diff.
git diff
сравнивает две конечные точки (вместо диапазона фиксации). Поскольку ОП хочет видеть изменения, внесенныеk73ud
, Он / Она должен разница между первый родительский коммитk73ud
:k73ud^
(илиk73ud^1
илиk73ud~
).таким образом,
diff
результаты будут включать в себя изменения Сk73ud
родитель (что означает в том числе изменения отk73ud
сам), вместо изменений ввел Сk73ud
(доdj374
).
чтобы увидеть разницу между:
ваша рабочая копия и промежуточная область:
% git diff
промежуточная область и последняя фиксация:
% git diff --staged
ваша рабочая копия и фиксация 4ac0a6733:
% git diff 4ac0a6733
Commit 4ac0a6733 и последний commit:
% git diff 4ac0a6733 HEAD
совершить 4ac0a6733 и совершить 826793951
% git diff 4ac0a6733 826793951
для более подробного объяснения см. официальная документация.
gitk --all
- выберите первый коммит
- щелкните правой кнопкой мыши С другой стороны, тогда сравнить выбранные → это
чтобы увидеть разницу между двумя разными коммитами (назовем их
a
иb
), используйтеgit diff a..b
- обратите внимание, что разница между
a
иb
напротивb
иa
.чтобы увидеть разницу между вашим последним фиксацией и еще не зафиксированными изменениями, используйте
git diff
если вы хотите, чтобы иметь возможность вернуться к разнице позже, вы можете сохранить его в файл.
git diff a..b > ../project.diff
Я написал скрипт, который отображает разницу между двумя коммитами, хорошо работает на 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)