2014-01-29 2 views
2

Я знаю, как удалить конкретную фиксацию из истории git с помощью git rebase --interactive.Удаление определенной фиксации в истории git с несколькими ветвями?

Мой вопрос касается более сложного случая с историей, как это:

A--X--B--C--D 
     \ 
     E--F 

, где я хотел бы, чтобы удалить коммит X. Проблема в том, что в этом случае есть две или несколько ветвей с родителями (B в этом случае), которые имеют X в своей истории, поэтому один git rebase -i не будет делать трюк (по крайней мере, я не знаю, как).

Есть ли простой способ удалить X, или я должен полагаться на перезагрузку всех ветвей самостоятельно, возможно, с помощью сценария оболочки?

ответ

3

К сожалению, в этой ситуации Git не помогает. Во-первых сделать интерактивный перебазироваться на ветке D путем удаления фиксации X.

Вы будете иметь следующую историю:

A--X--B 
\  \ 
    \  E--F 
    \ 
    B'-C'-D' 

Тогда вам нужно перебазировать ветвь F на B»с:

git rebase --onto B' B F 

(заменить коммиты имена по их идентификаторам)

Это будет в конечном итоге с

A--B'-C'-D' 
    \ 
     E'--F' 
Смежные вопросы