Как найти последнее слияние в git? - PullRequest
16 голосов
/ 04 февраля 2011

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

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

Полагаю, что слияния staging-> into-> master встречаются редко, я могу пометить их, а затем сделать «git whatchanged tag», ноЯ надеюсь, что есть способ сделать это без тегов.Спасибо.

Ответы [ 6 ]

16 голосов
/ 04 февраля 2011

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

git show :/^Merge

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

10 голосов
/ 23 июня 2017
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

Кредит идет на Джефроми для их комментарий к другому ответу .

5 голосов
/ 04 января 2017

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

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

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

1 голос
/ 07 февраля 2011

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

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


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

1 голос
/ 04 февраля 2011

Похоже, это моя лучшая ставка:

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

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

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

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

k = log --graph --pretty = формат: '% 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'"

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

РЕДАКТИРОВАТЬ: Как @jefromi отметил в комментариях к первому ответу, это, вероятно, лучший метод git log --merges -n 1

0 голосов
/ 20 февраля 2017

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...