Как я могу отличить файл, скажем pom.xml
, от главной ветки до произвольной более старой версии в Git?
Как разбить один файл на произвольную версию в Git?
Ответ 1
Вы можете сделать:
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
Ответ 2
git diff <revision> <path>
Например:
git diff b0d14a4 foobar.txt
Ответ 3
Если вы хотите увидеть разницу между последней фиксацией одного файла, вы можете сделать:
git log -p -1 filename
Это даст вам diff файла в git, не сравнивает ваш локальный файл.
Ответ 4
Чтобы узнать, что было изменено в файле в последнем коммите:
git diff HEAD~1 path/to/file.
Вы можете изменить число (~ 1) на n-ю фиксацию, которую вы хотите разграничить.
Ответ 5
git diff -w HEAD origin/master path/to/file
Ответ 6
Если ни одна из них не является вашим HEAD, тогда bash расширение брекета окажется действительно полезным, особенно если ваши имена файлов длинны, пример выше:
git diff master~20:pom.xml master:pom.xml
Стал бы
git diff {master~20,master}:pom.xml
Подробнее о Расширение брекета с помощью bash.
Ответ 7
Общий синтаксис:
$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, вы можете использовать тег /sha 1/ "HEAD ^" для id commit.
Протестировано с помощью git 1.9.1 на Ubuntu.
Ответ 8
Для людей, заинтересованных в том, чтобы делать то же самое из GitHub, см. сравнение задержек во времени.
Ответ 9
Для сравнения с 5 фиксацией текущей, как на master
, просто выполните:
git diff master~5:pom.xml master:pom.xml
Также вы можете ссылаться на хеш-номер фиксации, например, если хэш-номер x110bd64
, вы можете сделать что-то подобное, чтобы увидеть разницу:
git diff x110bd64 pom.xml
Ответ 10
Если вам нужно разделить один файл в тире, например, вы можете сделать
git diff [email protected]{0} -- path/to/file
Ответ 11
Если вы ищете diff для определенного коммита и хотите использовать пользовательский интерфейс github вместо командной строки (скажем, вы хотите связать его с другими людьми), вы можете сделать:
https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file>
Например:
Обратите внимание на предыдущие и следующие ссылки в правом верхнем углу, которые позволяют вам перемещаться по всем файлам в фиксации.
Это работает только для конкретной фиксации, но не для сравнения любых двух произвольных версий.
Ответ 12
git diff master~20 -- pom.xml
Работает, если вы тоже не находитесь в мастер-ветке.