Как отличить один файл от произвольной версии в Git?



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

465   13  
git

13 ответов:

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

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
git diff <revision> <path>

например:

git diff b0d14a4 foobar.txt

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

git log -p -1 filename

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

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

git diff HEAD~1 path/to/file.

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

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

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

станет

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

подробнее о фигурные скобки С Башем.

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

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

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

git diff master~20 -- pom.xml

работает, если вы не слишком в ветку master.

для сравнения с 5 фиксацией на текущем, оба на master, просто сделать:

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

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

git diff x110bd64 pom.xml

для людей, заинтересованных в том, чтобы сделать то же самое из GitHub, см. сравнение совершает во времени.

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

git diff stash@{0} -- path/to/file

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

https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file>

например:

https://github.com/grails/grails-core/commit/02942c5b4d832b856fbc04c186f1d02416895a7e/grails-test-suite-uber/build.gradle

обратите внимание на предыдущие и последующие ссылки в правом верхнем углу, которые позволяют вам перемещаться по всем файлам совершать.

это работает только для конкретной фиксации, но не для сравнения между любыми двумя произвольными версиями.

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

gitk pom.xml

в gitk вы можете нажать любую фиксацию (чтобы" выбрать "ее) и щелкнуть правой кнопкой мыши любую другую фиксацию, чтобы выбрать" Diff this -> selected "или" diff selected -> this " во всплывающем меню, в зависимости от того, какой порядок вы предпочитаете.

Comments

    Ничего не найдено.