Если я это сделаю, я смогу увидеть ссылку SHA1 с момента последнего извлечения локальной ветки из удаленной. Это может быть удобно при разрешении конфликтов, поскольку позволяет вам выполнить сравнение с main, чтобы увидеть, что изменилось на удаленном компьютере (без того, чтобы ваши собственные изменения вас отвлекали).
Просто интересно, есть ли удобный способ сослаться на эту ссылку (с помощью @ или чего-то еще), или я застрял в reflog.
Что-то вроде:
git reflog
Это работает нормально, если я посмотрю и использую ссылку SHA1 в журнале ссылок вместо @lastpull. Есть ли ярлык для этого?
Когда я говорю, что работает нормально, это когда:
Это будет выглядеть следующим образом:
Я ищу то, что там обозначено HEAD 2. Но мне не нужно считать коммиты, чтобы добраться до этого. Есть ли способ сослаться на этот последний рывок без цифр?
@chepner слияние, перебазирование, клонирование и все, что было из основного, прежде чем я начал добавлять что-то
Я хочу сказать, что не существует особого «последнего рывка», потому что рывок не является первоклассным «событием». Это просто удобство, позволяющее использовать git pull thing вместо git fetch thing; git merge thing.
Хотя что касается моего первого комментария, то, возможно, имеет значение выборка, а не слияние: есть ссылка FETCH_HEAD, которая может быть тем, что вам нужно.
@phd Это делает то, что мне нужно, яснее?





Вы можете получить сводку последнего коммита ветки, например
git log -n 1 develop
где development — название ветки. Если вам нужна только первая строка, это может быть полезно:
git log -n 1 develop --pretty=oneline
или, если вы хотите иметь только хеш, тогда
git log -n 1 develop --pretty=oneline | cut -d ' ' -f1
Я ищу что-то, что пропустит мои коммиты. Если я застрял в поиске, я остановлюсь на reflog.
Из вашего обновленного графика (и после уточнения требований в чате) данные имеют следующую историю:
a-b-c-d-e < main
\
f-g-h < hotfix
и вы хотите получить коммит b, вы можете использовать git merge-base e h – или git merge-base main hotfix, любые коммиты – для печати хеша коммита b. Чтобы затем получить изменения между b и hotfix (т. е. h), запустите git diff "$(git merge-base main hotfix)" hotfix. Для этого также существует сокращенный синтаксис: git diff main...hotfix (см. git help diff).
Аналогично, чтобы получить изменения между b и main, просто поменяйте местами аргументы команды: git diff hotfix...main или git diff "$(git merge-base hotfix main)" main. Если одна сторона равна HEAD, вы можете ее пропустить: git diff HEAD...hotfix эквивалентно git diff ...hotfix («покажите мне изменения из базы слияния исправления и текущей фиксации самого исправления»).
Это предполагает, что база слияния может быть определена тривиально. Для пары коммитов может существовать более одной базы слияния.
Чтобы получить коммит, а затем и разницу, вам не нужно заглядывать в рефлог или узнавать «последний рывок» (всегда помните: git pull по сути git fetch && git merge находится за кулисами). На весь вопрос можно ответить, пройдя по графику истории и топологически вычислив желаемый коммит.
Насколько я знаю, pull — это всего лишь одна фарфоровая команда для выполнения выборки с последующим немедленным слиянием того, что было получено, поэтому ваш вопрос звучит так: «Есть ли способ сослаться на последнее слияние?»