Скажем, я создаю ветвь hotfix
ветки develop
, сделаю две коммиты, объединив ее обратно в ветвь develop
и уничтожьте ветвь hotfix
.
Как узнать, какие коммиты были частью слияния? Возможно ли это?
Скажем, я создаю ветвь hotfix
ветки develop
, сделаю две коммиты, объединив ее обратно в ветвь develop
и уничтожьте ветвь hotfix
.
Как узнать, какие коммиты были частью слияния? Возможно ли это?
Если вы хотите, чтобы каждый коммит был объединен в последнем слиянии, вы можете попробовать следующее:
git log $(git merge-base --octopus $(git log -1 --merges --pretty=format:%P)).. --boundary
Вот пример моего текущего журнала:
~/Documents/Development/Java/gitBox (master) $ git log --graph --pretty=oneline --abbrev-commit
* 44899b9 pouf
* 8f49f9c Merge branch 'test'
|\
| * 3db39ca test
* | 69f431c pif
* | df1f51c lala
|/
* 8fae178 pif2
* 20f8ba6 init
Если мне нужны только коммиты, связанные с последним слиянием, я должен использовать git log -1 --merges --pretty=format:%P
, который дает мне родителям первого слияния:
~/Documents/Development/Java/gitBox (master) $ git log -1 --merges --pretty=format:%P
69f431cec7859b61d33c7503c9431ceea2aaf3e0 3db39ca3ab1e8f70462db23d94590628b5e7ad7b
Теперь, когда я знаю, какие родители мне нужно отслеживать, мне нужна их общая база, которую я могу получить через git merge-base --octopus
(-octopus есть на всякий случай):
~/Documents/Development/Java/gitBox (master) $ git merge-base --octopus $(git log -1 --merges --pretty=format:%P)
8fae178666e34a480b22e40f858efd9e7c66c3ca
Теперь с git log
я могу выполнять поиск каждой фиксации с базы до текущей HEAD и voilà:
~/Documents/Development/Java/gitBox (master) $ git log $(git merge-base --octopus $(git log -1 --merges --pretty=format:%P)).. --boundary --graph --pretty=oneline --abbrev-commit
* 44899b9 pouf
* 8f49f9c Merge branch 'test'
|\
| * 3db39ca test
* | 69f431c pif
* | df1f51c lala
|/
o 8fae178 pif2
Если вы немного перфекционист, вы также можете это сделать:
~/Documents/Development/Java/gitBox (master) $ git log $(git merge-base --octopus $(git log -1 --merges --pretty=format:%P))..$(git log -1 --merges --pretty=format:%H) --boundary --graph --pretty=oneline --abbrev-commit
* 8f49f9c Merge branch 'test'
|\
| * 3db39ca test
* | 69f431c pif
* | df1f51c lala
|/
o 8fae178 pif2
Теперь я думаю, что я сохраню это как псевдоним:)
PS: Очевидно, вам не нужно сохранять опции --graph --pretty=oneline --abbrev-commit
Ресурсы:
Скажите, что ваше коммитирование слиянием ab2f8173
, git log ab2f8173^..ab2f8173
покажет коммиты, в которые оно было объединено.
Вот как превратить это в псевдоним git
для легкого повторного использования:
$ git config --global alias.merge-log '!f() { git log --stat "$1^..$1"; }; f'
$ git merge-log 0865c12
Если у вас есть фиксация слияния (скажем a2345
) и произнесите git log -1 a2345
, он сообщит вам имена родителей (т.е. коммиты, которые были объединены в эту фиксацию). Это то, что вы ищете?