Когда я запускаю "git pull", я часто хочу знать, что изменилось между последней версией файла и новой. Скажем, я хочу знать, что кто-то сделал с конкретным файлом.
Как это сделать?
Я предполагаю, что это "git diff" с некоторыми параметрами для фиксации x по сравнению с фиксацией y, но я не могу понять синтаксис. Я также нахожу "git log" немного сбивающим с толку и не уверен, где взять идентификатор фиксации моей последней версии файла по сравнению с новой.
Ответы:
Есть всевозможные замечательные способы указать коммиты - см. Раздел, посвященный указанию ревизий,
man git-rev-parse
для более подробной информации. В этом случае вам, вероятно, понадобится:Это
@{1}
означает «предыдущую позицию ссылки, которую я указал», так что она соответствует тому, что вы проверили ранее - непосредственно перед вытягиванием. Вы можете закрепитьHEAD
там конец, если у вас также есть некоторые изменения в вашем рабочем дереве, и вы не хотите видеть различия для них.Я не уверен, что вы просите с «идентификатором фиксации моей последней версии файла» - «идентификатор» фиксации (хэш SHA1) - это 40-символьный шестнадцатеричный код прямо в верхней части каждой записи в выходных данных. журнала git. Это хеш для всего коммита, а не для данного файла. Вам действительно никогда не нужно больше - если вы хотите различать только один файл через пул, сделайте
Это общая вещь - если вы хотите знать о состоянии файла в данной фиксации, вы указываете фиксацию и файл, а не идентификатор / хэш, специфичный для файла.
источник
@{1}
как сокращение дляHEAD@{1}
)Мне нравится использовать:
Или, если я хочу различать только определенный файл:
источник
HEAD^
это родительская фиксация, а неpull
HEAD
это фиксация слияния,HEAD^
это первая родительская фиксация, так что да, это может быть фиксация передpull
. Чтобы получить другого родителя (для двустороннего слияния), используйтеHEAD^2
. Но тогда, приведенный выше ответ на самом деле не отвечает на вопрос, поэтому оставляю -1 ;-)Если вы сделаете прямой,
git pull
то вы либо будете «перенаправлены», либо объедините неизвестное количество коммитов из удаленного репозитория. Это происходит как одно действие, поэтому последняя фиксация, в которой вы были непосредственно перед извлечением, будет последней записью в журнале ссылок, и к ней можно будет получить доступ какHEAD@{1}
. Это означает, что вы можете:Однако я настоятельно рекомендую, если вы обнаружите, что много делаете это, тогда вам следует подумать о том, чтобы просто выполнить
git fetch
и изучить полученную ветку, прежде чем вручную слить или переустановить ее. Например, если вы на мастере и собирались использовать origin / master:источник
git log
вместо вместоgit diff
здесь (даже если синтаксис немного несогласован между '..' forgit log
и '...' forgit diff
;) +1 См. Stackoverflow.com/questions/53569/… и stackoverflow.com/questions / 850607 /…