Ответ 1
Попробуйте это, он выберет последнюю ветвь, где сообщение фиксации начинается с "Merge":
git show :/^Merge
Здесь веб-сайт с несколькими советами git, которые могут вам помочь.
Для веб-сайта у меня есть мастер и постановка, я работал над постановкой на 10 дней. Как я точно знаю, что изменилось с момента моего последнего слияния или когда это слияние было? Большинство слияний, которые я сделал, в конечном итоге являются FF, поэтому я не могу зарегистрировать их как git merge branch -m 'merging staging'
(git сообщает, что он игнорируется -m). Я обычно объединять мастер в стадию тестирования перед слиянием промежуточной стадии в мастер для большего тестирования и развертывания.
Я мог бы пометить каждый, но я беспокоюсь о беспорядке в этом отношении для слияний. То, что я хотел бы знать, "грубо говоря, что изменилось с момента моего последнего слияния постановки на мастер?" Тогда я мог бы убедиться, что я провел дополнительное время, исследуя эти изменения в заключительном экзамене. Иногда коллеги вносят изменения, которые я не заметил до этого этапа.
Я предполагаю, что, поскольку промежуточные слияния → в- > master редки, я могу их пометить, а затем сделать тег git whatchanged, но я надеюсь, что это не тег-способ сделать это. Спасибо.
Попробуйте это, он выберет последнюю ветвь, где сообщение фиксации начинается с "Merge":
git show :/^Merge
Здесь веб-сайт с несколькими советами git, которые могут вам помочь.
Альтернатива, которая не зависит от содержимого сообщения фиксации:
$ git rev-list --min-parents=2 --max-count=1 HEAD
9c6e6d6b6b9bd293335700e34e05217ae8e7a7e8
--min-parents=2
выбирает только коммиты, которые сливаются, --max-count=1
показывает только первый фиксатор при возврате в историю. Если указанный commit (HEAD
) не имеет каких-либо слияний в своей истории, выход будет пустым.
Похоже, это мой лучший выбор:
Я редактировал ~/.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
Похоже, что вы действительно не хотите знать , что изменилось с момента последнего слияния, но , что у меня есть на этапе ветвления, еще не на главном сервере? (или наоборот). Если это так, посмотрите на команду git cherry
.
Хотя я должен признаться, что никогда не использовал эту команду из-за формата вывода, что не очень полезно. Возможно, есть способ подавать этот вывод на git log/git show или такой.
Изменить. Насколько я понимаю, вам не нужен тег для использования git whatchanged
. Попробуйте просто git whatchanged master..staging
, чтобы узнать, что изменилось при постановке, поскольку вы в последний раз слились с постановкой на мастер.
Почему бы просто не разделить свою промежуточную ветвь против мастера? Это покажет вам фактические различия в каждом из ваших файлов, а не только те безвредные вещи. Также вещи, которые вы, возможно, упали при слиянии с постановкой на мастер в прошлом.
попробуйте git diff master..staging
или git diff master...staging
, чтобы увидеть отличие от общего предка до "постановки".
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 для своего комментария к другому ответу.