Как различить один файл в произвольной версии в Git? - PullRequest
283 голосов
/ 07 апреля 2011

Как мне передать файл, скажем pom.xml, из главной ветки в произвольную более старую версию в Git?

Ответы [ 13 ]

298 голосов
/ 07 апреля 2011

Вы можете сделать:

git diff master~20:pom.xml pom.xml

... чтобы сравнить ваш текущий pom.xml с одним из master 20 ревизий назад через первого родителя.Вы можете заменить master~20, конечно, именем объекта (SHA1sum) коммита или любым из многих других способов указания ревизии .

Обратите внимание, что это на самом деле сравнениестарая pom.xml версия в вашем рабочем дереве, а не версия, зафиксированная в master.Если вы хотите этого, вы можете сделать следующее:

git diff master~20:pom.xml master:pom.xml
130 голосов
/ 07 апреля 2011
git diff <revision> <path>

Например:

git diff b0d14a4 foobar.txt
35 голосов
/ 29 августа 2012

Если вы хотите увидеть разницу между последним коммитом одного файла, вы можете сделать:

git log -p -1 filename

Это даст вам различие файла в git, не сравнивая ваш локальный файл.

16 голосов
/ 28 сентября 2012

Чтобы увидеть, что было изменено в файле во время последнего коммита:

git diff HEAD~1 path/to/file.

Вы можете изменить число (~ 1) на n-й коммит, с которым вы хотите использовать diff.

5 голосов
/ 20 июня 2017

Если ни один из коммитов не является вашим HEAD, тогда расширение в bash оказывается действительно полезным, особенно если ваши имена файлов длинные, пример выше:

git diff master~20:pom.xml master:pom.xml

станет

git diff {master~20,master}:pom.xml

Подробнее о Расширение скобки с ударом.

5 голосов
/ 11 марта 2016

Общий синтаксис:

$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.

4 голосов
/ 20 октября 2014

git diff -w HEAD origin / master path / to / file

3 голосов
/ 01 июля 2017

Для сравнения 5-ти коммитов с текущим, оба на master, просто выполните:

git diff master~5:pom.xml master:pom.xml

Также вы можете сослаться на хэш-номер коммита, например, если хеш-номер равен x110bd64, вы можете сделать что-то вроде этого, чтобы увидеть разницу:

git diff x110bd64 pom.xml
2 голосов
/ 24 марта 2017
git diff master~20 -- pom.xml

Работает, если вы не находитесь в основной ветке тоже.

1 голос
/ 17 июля 2018

Если вы хорошо используете графический инструмент (или даже предпочитаете его), вы можете:

gitk pom.xml

В gitk вы можете затем щелкнуть любой коммит («выбрать» его) и щелкнуть правой кнопкой мыши любой другой коммит, чтобы выбрать «Разбросить это - выбранный» или «Разбросить выбранный -> этот» во всплывающем меню, в зависимости от того, в каком порядке вы предпочитаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...