2014-11-27 3 views
3

Просто, я сделал так:изменения существуют обязательства по текущей фиксации

A------B-------C 
     \ 
     \ 
      B2 

Теперь я хочу изменить B до B2.

A------B2-------C 

Возможно ли это?

РЕШЕНИЕ ИСТОРИЯ:

Я просто добавил свою историю работы.

$ git log 
commit b671c70b C 
commit f4acdc2b B 
commit 56f38939 A 

$ git checkout f4acdc2b 

и я что-то изменил ... затем был зафиксирован с опцией -amend.

$ git commit -amend 
$ git log 
commit e2fd729 B' 
commit 56f3893 A 

Теперь это стало так:

A------B-------C 
     \ 
     \ 
      B' 

Для перебазирования B до B»

$ git checkout b671c70b 
$ git rebase -i 56f38939 

который открывает интерактивный редактор

pick f4acdc2b B 
pick 56f38939 A 

просто удалить строку pick f4acdc2b , сохранить и выйти.

Если есть ошибка error: could not apply b671c70b... C, редактировать все конфликты слияния, а затем,

$ git add . 
$ git rebase --continue 

$ git log 
commit 914c6bc C' 
commit 56f3893 A 

$ git checkout 914c6bc 
$ git rebase e2fd729 
$ git log 
commit 5c65190 C'' 
commit e2fd729 B' 
commit 56f3893 A 

Теперь он выглядит следующим образом.

A------B'-------C'' 
+0

Вы должны были бы изменить ШАС как для В2 и С помощью перебазирования. –

ответ

2

Вы можете интерактивно перебазировать свой филиал на вершине B2 (на вершине A на самом деле, так как вы хотите B2 Gone):

git checkout yourBranch # which references C) 
git rebase -i A 
# drop B 

Это даст:

A------B2'-------C' 

(обратите внимание, что C' - C с другим SHA1, поскольку его родительский объект изменился)
(Тот же комментарий для B2, так как его родитель изменился)

+0

Но в этом случае 'B' останется в истории. Результирующий репозиторий будет выглядеть как «A ------- B ------ B2 ------- C'', не так ли? –

+0

@ RenéLink True: Я отредактировал ответ, чтобы добавить интерактивную часть rebase. – VonC

3

Чтобы полностью удалить B вы должны повторно интегрировать B2 на A и C на B2.

git checkout C 
git rebase B2 

Это rebases филиал C на вершине B2

A-------B------B2-------C' 

(обратите внимание, что C»является новой фиксации)

Но теперь вы до сих пор B совершить в истории. Вы можете удалить его с помощью интерактивной rebase.

git rebase -i A 

который открывает интерактивный редактор

pick 05c98ef B 
pick e31d9f0 B2 
pick 5d30d05 C 

просто удалить строку pick 05c98ef B, сохранить и выйти. После этого B удаляется, и ваша история выглядит следующим образом

A------B2'-------C'' 
+0

О, спасибо. Я искал, как удалить B. Это прекрасно работает. –

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