Ответы:
Ты можешь сделать:
git diff master~20:pom.xml pom.xml
... чтобы сравнить ваш текущий pom.xmlс тем из master20 ревизий назад через первого родителя. master~20Конечно, вы можете заменить его именем объекта (SHA1sum) коммита или любым другим способом указания ревизии .
Обратите внимание, что это на самом деле сравнение старого pom.xmlс версией в вашем рабочем дереве, а не с версией, зафиксированной в master. Если вы хотите этого, тогда вы можете сделать следующее:
git diff master~20:pom.xml master:pom.xml
git diff <revision> <path>
Например:
git diff b0d14a4 foobar.txt
git diff <revision> root/path/file.
Если вы хотите увидеть разницу между последним коммитом одного файла, вы можете сделать:
git log -p -1 filename
Это даст вам разницу в файле в git, не сравнивая ваш локальный файл.
-1шаг за шагом, пока не получите изменения.
gitlog () { git log -${3:-p} -${2:-1} $1; } используется как: gitlog Rakefileили gitlog Rakefile 5и gitlog Rakefile 10 s. Первый показывает один diff; второй показывает пять различий; третий показывает десять --no-patch.
Чтобы увидеть, что было изменено в файле при последнем коммите:
git diff HEAD~1 path/to/file.
Вы можете изменить число (~ 1) на n-й коммит, с которым вы хотите получить разницу.
HEAD~1его подставляют <revision>, что делает этот ответ дубликатом.
Общий синтаксис:
$git diff oldCommit..newCommit -- **FileName.xml > ~/diff.txt
для всех файлов с именем «FileName.xml» в любом месте вашего репо.
Обратите внимание на пробел между "-" и "**"
Ответьте на свой вопрос:
$git checkout master
$git diff oldCommit..HEAD -- **pom.xml
or
$git diff oldCommit..HEAD -- relative/path/to/pom.xml
как всегда с git, вы можете использовать тэг / sha1 / "HEAD ^", чтобы идентифицировать коммит.
Протестировано с git 1.9.1 на Ubuntu.
Если ни один из коммитов не является вашим HEAD, то расширение скобок bash оказывается действительно полезным, особенно если ваши имена файлов длинные, пример выше:
git diff master~20:pom.xml master:pom.xml
Станет
git diff {master~20,master}:pom.xml
Подробнее о расширении Brace с помощью bash.
Для сравнения 5-ти коммитов с текущим, обоими master, просто сделайте:
git diff master~5:pom.xml master:pom.xml
Также вы можете обратиться к хэш-номеру коммита, например, если хеш-номер равен x110bd64, вы можете сделать что-то вроде этого, чтобы увидеть разницу:
git diff x110bd64 pom.xml
git diff -w HEAD origin / master path / to / file
git diff master~20 -- pom.xml
Работает, если вы тоже не в мастер ветке.
Если вы хорошо используете графический инструмент (или даже предпочитаете его), вы можете:
gitk pom.xml
В gitk вы можете затем щелкнуть любой коммит (чтобы «выбрать» его) и щелкнуть правой кнопкой мыши любой другой коммит, чтобы выбрать «Разбросить это - выбранный» или «Разбросить выбранный -> этот», в зависимости от того, какой порядок вы предпочитаете.
Для людей, заинтересованных в том же в GitHub, смотрите сравнение коммитов по времени .
Если вам нужно сравнить один файл в тайнике, например, вы можете сделать
git diff stash@{0} -- path/to/file
Если вы ищете diff для определенного коммита и хотите использовать пользовательский интерфейс github вместо командной строки (скажем, вы хотите связать его с другими людьми), вы можете сделать:
https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file>
Например:
Обратите внимание на ссылки «Предыдущая» и «Следующая» в правом верхнем углу, которые позволяют перемещаться по всем файлам в коммите.
Это работает только для определенного коммита, но не для сравнения между любыми двумя произвольными версиями.
git diff <revision>:foo/ HEAD:foo/.