Как проверить журнал git на «ускоренную пересылку» слияния? - PullRequest
9 голосов
/ 20 мая 2011

В следующем примере, есть ли способ узнать, произошло ли слияние?Глядя на журнал git, я не могу сказать, что слился.

# setup example directory
$ mkdir test
$ cd test
$ git init
$ touch a
$ git add a
$ git commit -m "1"

# switch to different branch
$ git checkout -b topic
$ touch b
$ git add b
$ git commit -m "2"

# go back to master and merge
$ git checkout master
$ git merge topic

# git log

commit cccc64de3947828f487a8ce3c3e72b0f68dc88c3
Author: none
Date:   Fri May 20 05:54:45 2011 -0700

    2

commit a5d57454295759609d91a60219002e74016eed2b
Author: none
Date:   Fri May 20 05:54:29 2011 -0700

    1

Ответы [ 3 ]

13 голосов
/ 20 мая 2011

В этом случае git обнаружил, что можно выполнить так называемое «ускоренное слияние», так как ветвь, в которую вы объединяетесь, уже содержит все в текущей ветке - ей не нужно создавать новый коммит в графе коммитов для объединения двух веток.

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

git merge --no-ff topic

Однако, если вам действительно нужно знать, произошло ли слияние или нет, вы можете найти эту информацию в "reflog". Например, в вашей ситуации git reflog выдаст следующий вывод:

1eecbcb HEAD@{0}: merge topic: Fast-forward
193ae5e HEAD@{1}: checkout: moving from topic to master
1eecbcb HEAD@{2}: commit: 2
193ae5e HEAD@{3}: checkout: moving from master to topic
193ae5e HEAD@{4}: commit (initial): 1

... который показывает вам, как HEAD был недавно изменен, и какое действие вызвало это. Однако полагаться на reflog, как правило, плохая идея, за исключением особых ситуаций, таких как восстановление после ошибок - лучше просто подумать с точки зрения графика коммитов и сделать так, чтобы он отражал то, что вы сделали. git merge --no-ff - один из таких методов, который нравится многим людям.

1 голос
/ 20 мая 2011

Вы можете использовать git merge-base:

git merge-base master topic

Это покажет cccc64de3947828f487a8ce3c3e72b0f68dc88c3 (2) коммит

Или вы можете использовать:

git show $(git merge-base master topic)
0 голосов
/ 20 мая 2011

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

touch c
git add c
git commit -m "3"
git merge topic

То есть вы добавляете коммит в ветку master.Тогда график коммитов больше не является линейной последовательностью, и данные должны объединяться из нескольких ветвей.

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