2012-05-21 10 views
3

Я знаю, что в этом вопросе есть много вопросов, но я не могу найти ответ, который я ищу вообще.Git - Проблемы с интерактивной ребазой и сквоированием

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

commit 878c07412aab6a6b06b7fc8dd84c2418cc4f31d8 
Merge: 9ffa590 c9f5552 
Author: *** 
Date: Mon May 21 16:02:36 2012 +0100 

    Merge branch 'modelUpdate4' 

    Conflicts: 
     ***.xcodeproj/project.pbxproj 

commit c9f5552862872673317701c3dffd7fb6b6daa02c 
Author: *** 
Date: Mon May 21 15:03:21 2012 +0100 

    Modified model according to requests. Repopulated seeded database. 

Это выход из журнала мерзавца и два коммиты Я хочу, чтобы раздавить как единое целое. Однако, когда я это делаю:

git rebase -i HEAD~2 

На самом деле это всего лишь отображает 4 ранее совершенных (и толкаемых) фиксации. Неужели я не понимаю, как мои ветви сливаются? Если я попробую и git rebase -i, это просто отображает первое коммит в списке журналов git.

Спасибо!

ответ

3

Поскольку вы сказали четыре фиксаций уже толкали, я предполагаю, что ваш график (git log --oneline --decorate --graph) выглядят примерно так, где вы получили ветвистые фиксации между master и modelUpdate4 уже оттеснен на удаленный репозиторий:

* (master, modelUpdate4, HEAD) Merge branch 'modelUpdate4' 
| \ 
| * (origin/modelUpdate4) Modified model according to requests. [HEAD^2] 
| | 
| * Another commit on modelUpdate4 
| | 
| * Yet another commit on modelUpdate4! 
| | 
* | (origin/master) Something that conflics with a commit in modelUpdate4 [HEAD~1] 
|/
* Previous commit on master [HEAD~2] 

HEAD~2 является первым родителем первого родителя, и поскольку ваш HEAD является слиянием modelUpdate4 в master, он ссылается на две фиксации по линии master. HEAD^2 - HEAD's второй родитель, поэтому фиксация до HEAD вниз по линии modelUpdate4. (Смотри также: http://paulboxley.com/blog/2011/06/git-caret-and-tilde)

Если HEAD~2 ваша новая база, вы получите все коммиты между HEAD~2 и master по прямой линии. Вам также придется иметь дело с конфликтом ветки в деле modelUpdate4, где это происходит.

* (master, HEAD) Merge branch 'modelUpdate4' 
| 
* Modified model according to requests. Repopulated seeded database. 
| 
* Another commit on modelUpdate4 
| 
* Yet another commit on modelUpdate4! 
| 
* Something on master that conflics with modelUpdate4 
| 
* Previous commit on master 

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

Кроме того, вы можете переустанавливать непосредственно на origin/master. origin/modelUpdate4 закончится в git boonies, но поскольку это ветка задачи, я готов поспорить, что вы все равно ее удаляли.

+0

Спасибо, имеет смысл! Граф действительно полезен для понимания того, как работает HEAD ~ 2. – Tim

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

  • Нет связанных вопросов^_^