Конвертируйте коммит с двумя родителями в коммит с одним родителем в git - PullRequest
4 голосов
/ 26 мая 2010

Oops! Кажется, я сделал что-то не так в прошлый раз, когда слил две ветки в своем хранилище:

Оригинальный репозиторий http://img532.imageshack.us/img532/9039/screenshotrm.png

Это было далеко от того, что я ожидал. Есть ли способ устроить этот беспорядок и получить что-то вроде следующего? Что я сделал не так?

Что я ищу http://img684.imageshack.us/img684/9977/screenshot2ah.png

1 Ответ

11 голосов
/ 26 мая 2010

Коммит слияния должен иметь двух родителей. Вот и весь смысл слияния.

Если у вас есть действительно веская причина для слияния только с одним родителем, вы можете использовать опцию --squash:

# starting with branch-full-reordering at "Corrected GPU float measures"
git merge --squash branch-full-reordering-wo-auxarray-wo-diver
# go on to make the "improve performance commit"

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

История, которую вы описываете, тем не менее, вовсе не является слиянием, сквошем или чем-то другим. Это ребаз.

# starting with branch-full-reordering at "Corrected GPU float measures"
git rebase branch-full-reordering branch-full-reordering-wo-auxarray-wo-diver
# go on to make the "improve performance commit"

В этом случае коммит слияния не будет - вы просто перевезли (перебазировали) вторичную ветвь на основную.

Я должен еще раз подчеркнуть: история, с которой вы закончили, скорее всего, то, что вы хотите. Он фиксирует тот факт, что некоторые разработки происходили на боковой ветви, а затем были объединены обратно.

Чтобы пересмотреть свою историю, чтобы она выглядела так, как вы хотите, вы можете сделать что-то вроде этого:

# recreate your topic branch
git branch topic <SHA1 of commit "Correct pesky bug">
# overkill: you could also specify that as branch-full-reordering^^2
# which means the second parent of the [first] parent of the branch tip

# rebase the topic branch like you meant to in the first place :)
# ~2 means two commits before
# you could also just use the SHA1 of commit "Corrected GPU float measures"
git rebase branch-full-reordering~2 topic

# rebase the main branch onto the topic
# the merge will be ignored, so this will just move the "Improve performance" commit    
git rebase topic branch-full-reordering

# delete the topic branch
git branch -d topic
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...