Есть ли способ сослаться на «последний рывок»?

Если я это сделаю, я смогу увидеть ссылку SHA1 с момента последнего извлечения локальной ветки из удаленной. Это может быть удобно при разрешении конфликтов, поскольку позволяет вам выполнить сравнение с main, чтобы увидеть, что изменилось на удаленном компьютере (без того, чтобы ваши собственные изменения вас отвлекали).

Просто интересно, есть ли удобный способ сослаться на эту ссылку (с помощью @ или чего-то еще), или я застрял в reflog.

Что-то вроде:

git reflog

Это работает нормально, если я посмотрю и использую ссылку SHA1 в журнале ссылок вместо @lastpull. Есть ли ярлык для этого?

Когда я говорю, что работает нормально, это когда:

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

Это будет выглядеть следующим образом:

Git-ссылки: обзор

Я ищу то, что там обозначено HEAD 2. Но мне не нужно считать коммиты, чтобы добраться до этого. Есть ли способ сослаться на этот последний рывок без цифр?

Насколько я знаю, pull — это всего лишь одна фарфоровая команда для выполнения выборки с последующим немедленным слиянием того, что было получено, поэтому ваш вопрос звучит так: «Есть ли способ сослаться на последнее слияние?»

chepner 17.05.2024 15:23

@chepner слияние, перебазирование, клонирование и все, что было из основного, прежде чем я начал добавлять что-то

candied_orange 17.05.2024 15:24

Я хочу сказать, что не существует особого «последнего рывка», потому что рывок не является первоклассным «событием». Это просто удобство, позволяющее использовать git pull thing вместо git fetch thing; git merge thing.

chepner 17.05.2024 15:28

Хотя что касается моего первого комментария, то, возможно, имеет значение выборка, а не слияние: есть ссылка FETCH_HEAD, которая может быть тем, что вам нужно.

chepner 17.05.2024 15:30

@phd Это делает то, что мне нужно, яснее?

candied_orange 17.05.2024 19:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
5
75
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете получить сводку последнего коммита ветки, например

git log -n 1 develop

где development — название ветки. Если вам нужна только первая строка, это может быть полезно:

git log -n 1 develop --pretty=oneline

или, если вы хотите иметь только хеш, тогда

git log -n 1 develop --pretty=oneline | cut -d ' ' -f1

Я ищу что-то, что пропустит мои коммиты. Если я застрял в поиске, я остановлюсь на reflog.

candied_orange 17.05.2024 15:39
Ответ принят как подходящий

Из вашего обновленного графика (и после уточнения требований в чате) данные имеют следующую историю:

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 находится за кулисами). На весь вопрос можно ответить, пройдя по графику истории и топологически вычислив желаемый коммит.

Другие вопросы по теме