2010-05-26 1 views
4

Упс! Кажется, что я сделал что-то неправильно в последний раз, когда я сливались две ветви в моем хранилище:Преобразование двух родительского коммита в однопользовательский в git

Original repository http://img532.imageshack.us/img532/9039/screenshotrm.png

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

What I am looking for http://img684.imageshack.us/img684/9977/screenshot2ah.png

+0

Imageshack больше не воспроизводит скриншоты – janv8000

+1

@ janv8000 К сожалению, это очень неудачно. У меня больше нет копии скриншотов, и Internet Wayback Machine здесь не очень помогает. Тем не менее этот вопрос по-прежнему интересен. Но спасибо за это. – Auron

ответ

11

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

Если у вас есть действительно хорошая причина для желания слияния только с одним родителем, вы можете использовать --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 
+0

Да, возможно, то, что я искал, было действительно перебазом, а не слиянием. Извините, я немного новичок в хитростях. Но что это сделано, все сделано. Могу ли я изменить хранилище в текущем состоянии на что-то вроде второго рисунка? – Auron

+0

@ Аурон: Да, определенно. Ты можешь делать что угодно! В некоторых инструкциях я отредактирую. – Cascabel

+0

Я попробовал перезагрузить, но это сложнее, чем я изначально думал. Я думаю, что оставлю два филиала, потому что, как вы сказали, он лучше отражает то, как я развивал обе ветви. Спасибо! – Auron

Смежные вопросы