2013-11-13 7 views
0

Я хочу знать, как раздавить некоторые коммиты, которые находятся выше по течению от слияния. Ниже приведена попытка сделать это, в результате чего новая раздавленная ветка становится независимой, оставляя исходные коммиты не слитыми.git squash на месте перед слиянием

$ git checkout dev-track_rpm 
Switched to branch 'dev-track_rpm' 
$ git lg 
**removed a bunch of log for brevity** 
| * 6802588 - (2 months ago) 
* | 267b937 - (1 month ago) 
|/ 
* 45f7846 - (2 months ago) Merge branch 'dev-track_rpm' 
|\ 
| * 7e07b43 - (2 months ago) (HEAD, dev-track_rpm) 
| * 5cce85b - (2 months ago) 
| * e36f2fb - (2 months ago) 
| * 081175b - (2 months ago) 
* | 4896e1f - (2 months ago) 
|/ 
* 4767c9d - (2 months ago) 


$ git rebase -i -p 4767c9d **also tried without -p initially** 
*choose to squash 5cce85b and e36f2fb** 
[detached HEAD c77cf3e] 
20 files changed, 4139 insertions(+), 0 deletions(-) 
**removed file list for brevity** 
Successfully rebased and updated refs/heads/dev-track_rpm. 
$ git lg 
* 260cdce - (2 months ago) (HEAD, dev-track_rpm) 
* c77cf3e - (2 months ago) 
**removed same bunch of log for brevity** 
| | * 6802588 - (2 months ago) 
| * | 267b937 - (1 month ago) 
| |/ 
| * 45f7846 - (2 months ago) Merge branch 'dev-track_rpm' 
| |\ 
| | * 7e07b43 - (2 months ago) 
| | * 5cce85b - (2 months ago) 
| | * e36f2fb - (2 months ago) 
| | * 081175b - (2 months ago) 
| |/ 
|/| 
| * 4896e1f - (2 months ago) 
|/ 
* 4767c9d - (2 months ago) 
$ 

Я хотел получить это:

$ git lg 
**removed a bunch of log for brevity** 
| * 6802588 - (2 months ago) 
* | 267b937 - (1 month ago) 
|/ 
* 45f7846 - (2 months ago) Merge branch 'dev-track_rpm' 
|\ 
| * <some new sha> - (2 months ago) same changes as 7e07b43 (HEAD, dev-track_rpm) 
| * <some new sha> - (2 months ago) squashed 
* | 4896e1f - (2 months ago) 
|/ 
* 4767c9d - (2 months ago) 
+1

Это верно. Ничто в объекте db никогда не меняется, вы добавляете к нему новые вещи. – jthill

ответ

0

Когда вы в Rebase изменить хэш порядок дерева, так что он не будет выглядеть как другое дерево, независимо от того, что вы делаете, только решение будет вынуждать новое дерево заменить старое дерево, хотя обычно не рекомендуется, особенно когда это общий проект, в котором у вас есть несколько коммиттеров.

EDIT: Вот простое объяснение того, что вы хотите сделать:

Пусть это текущее дерево (предположим, что эти буквы совершают хэши)

A -> B -> C -> D -> E 

И вы хотите сквош B и C и D

Таким образом, вы запускаете эту команду

git rebase -i B~ 

Ум, который B~ также же, как A, вы хотите, родитель последнего коммита вы хотите изменить, я обычно использую формат ~.

вы получите ваш редактор с этими линиями

pick B the b message 
pick C the c messasge 
pick D the d message 
pick E the e message 

вы поменяете кирки в squahses

pick B the b message 
squash C the c messasge 
squash D the d message 
pick E the e message 

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

Теперь вы будете в конечном итоге с деревом, глядя, как этот

A -> BCD' -> E' 

Обратите внимание, что даже если вы только отредактировали B, C и D фиксаций, E также были изменены, потому что дерево под ним были изменены , если вы рисуете все дерево это будет выглядеть следующим образом

A -> BCD' -> E' <- HEAD and BRANCH will be here 
\-> B -> C -> D -> E (this part will be detached) 

затем подтолкнет ГОЛОВА или ответвлению к происхождению с принудительным -f

git push origin BRANCH -f 
+0

Я единственный, кто использует это репо. Я мог бы заставить толкнуть дерево, но я все равно собираюсь в конечном итоге с деревом, которое я получил, только сейчас его толкнули. Можете ли вы объяснить, как это решение? – jnewt

+0

Я действительно не понимаю, какие коммиты вы хотите объединить/сквош, можете ли вы объяснить в более простом методе текущее дерево и нужное дерево –

+0

Я хочу скворовать 5cce85b и e36f2fb в 081175b – jnewt

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