Подтвердить что ты не робот

Как найти последнее слияние в git?

Для веб-сайта у меня есть мастер и постановка, я работал над постановкой на 10 дней. Как я точно знаю, что изменилось с момента моего последнего слияния или когда это слияние было? Большинство слияний, которые я сделал, в конечном итоге являются FF, поэтому я не могу зарегистрировать их как git merge branch -m 'merging staging' (git сообщает, что он игнорируется -m). Я обычно объединять мастер в стадию тестирования перед слиянием промежуточной стадии в мастер для большего тестирования и развертывания.

Я мог бы пометить каждый, но я беспокоюсь о беспорядке в этом отношении для слияний. То, что я хотел бы знать, "грубо говоря, что изменилось с момента моего последнего слияния постановки на мастер?" Тогда я мог бы убедиться, что я провел дополнительное время, исследуя эти изменения в заключительном экзамене. Иногда коллеги вносят изменения, которые я не заметил до этого этапа.

Я предполагаю, что, поскольку промежуточные слияния → в- > master редки, я могу их пометить, а затем сделать тег git whatchanged, но я надеюсь, что это не тег-способ сделать это. Спасибо.

4b9b3361

Ответ 1

Попробуйте это, он выберет последнюю ветвь, где сообщение фиксации начинается с "Merge":

git show :/^Merge

Здесь веб-сайт с несколькими советами git, которые могут вам помочь.

Ответ 2

Альтернатива, которая не зависит от содержимого сообщения фиксации:

$ git rev-list --min-parents=2 --max-count=1 HEAD
9c6e6d6b6b9bd293335700e34e05217ae8e7a7e8

--min-parents=2 выбирает только коммиты, которые сливаются, --max-count=1 показывает только первый фиксатор при возврате в историю. Если указанный commit (HEAD) не имеет каких-либо слияний в своей истории, выход будет пустым.

Ответ 3

Похоже, это мой лучший выбор:

Я редактировал ~/.gitconfig, добавляя:

[branch "master"]
    mergeoptions = --no-ff

Тогда, если я нахожусь на хозяине, и я сливаюсь в ветке, он показывает это как полное слияние. Наличие в качестве опции конфигурации только для "мастера" показывает, насколько удивительным является git, поэтому я все еще могу объединить FF внутри ветвей, где у меня, вероятно, будет много недолговечных ветвей темы, и у меня нет не забудьте указать --no-ff при слиянии с мастером. Красивая.

Я использую этот псевдоним для просмотра журналов:

k = log --graph --pretty = format: '% Cred% h% Creset -% C (желтый)% d% Creset% s% Cgreen (% cr,% cd)% C (жирный синий) <;% an > % Creset '--abbrev-commit

> git k (similar to the gui gitk, but stays in the terminal)

Когда я просматриваю журналы таким образом, он рисует красивую картину ветвления. Если я хочу найти последний, я могу сделать

> git show :/"Merge branch 'staging'"

Спасибо за помощь.

EDIT: Как отметил @jefromi в комментариях к первому ответу, это, вероятно, лучший метод git log --merges -n 1

Ответ 4

Похоже, что вы действительно не хотите знать , что изменилось с момента последнего слияния, но , что у меня есть на этапе ветвления, еще не на главном сервере? (или наоборот). Если это так, посмотрите на команду git cherry.

Хотя я должен признаться, что никогда не использовал эту команду из-за формата вывода, что не очень полезно. Возможно, есть способ подавать этот вывод на git log/git show или такой.


Изменить. Насколько я понимаю, вам не нужен тег для использования git whatchanged. Попробуйте просто git whatchanged master..staging, чтобы узнать, что изменилось при постановке, поскольку вы в последний раз слились с постановкой на мастер.

Ответ 5

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

попробуйте git diff master..staging или git diff master...staging, чтобы увидеть отличие от общего предка до "постановки".

Ответ 6

git log --merges -n 1

работает хорошо. От man git-log:

   --merges
       Print only merge commits. This is exactly the same as --min-parents=2.

Вот пример использования --pretty=format:"%H" для получения только SHA.

$ git log --pretty=format:"%H" --merges -n 1
f32e1f13eef7d5843e8063b8709d01af6dcd5dbf

Кредит отправляется Jefromi для своего комментария к другому ответу.