2016-07-01 6 views
3

Я следующая последовательность фиксаций:Как удалить нежелательные фиксации и слияния

A---B---D---E---G---H--- 
    \ /\ 
     C---/ F--- 

Commit D вводит неправильное изменение и слияние фиксации E направляет его на F и G. Я хотел бы удалить D и E совершает комм. Что можно сделать, чтобы иметь:

A---B---C---G---H--- 
     \ 
      F--- 

ответ

0

Вы пересматриваете историю здесь. Если эта история отсутствует в других репозиториях, это нормально, иначе убедитесь, что вы знаете, что делаете.

выезд филиал имени my_better_history с HEAD в C мерзавце касса -b my_better_history C

Привести в коммитах вы хотите: мерзавца вишневого выбор G H

Проверьте работу. Если ваша исходная ветка была вызвана master, вы можете сделать git diff-tool master, чтобы убедиться, что состояния идентичны. Если все будет хорошо, вы можете сделать свою новую историю своей официальной историей. Допустим, вы начали с ответвлением master, то вы можете сделать:

git checkout master 
git reset --hard C#now your master is back to the common history point. 
git merge my_better_history 

Теперь мастер будет иметь нужную историю.

+0

Спасибо. Да, я забыл упомянуть, все, что есть на моем местном репо. – msek

0
  • вам нужно сбросить --hard к B_COMMIT_HASH
  • затем cherry-pick G и H совершает
  • afret этого вы будете deateched вам нужно будет толкать brache с флагом -f
0

Это не полный ответ, который вы должны будете выяснить, остальное .. но НТН

РЕШЕНИЕ 1:

Если вы нормально с пересмотром hostory - !! на некоторых рабочих процессах это очень плохо .. на некоторых это не так - например, когда у вас есть местная ветка и т. д. но будьте осторожны !!

Вы можете использовать хороший инструмент интерактивного перебазироваться:

git rebase -i HASH_OF_B 

Вы увидите наверное что-то вроде этого:

pick H 
pick G 
pick F 
pick D <-- remove this line 
pick C 
pick A 

И вы будете просто удалить те, которые D (надеюсь, она будет работать в этом если у вас есть несколько детей и т. д.) - Будьте очень осторожны, я не уверен, что это будет делать.

РЕШЕНИЕ 2:

git revert C 
git revert D 

и вы в безопасности - не изменяя истории и т.д ..

Вы должны будете сделать это на обеих ветвях - на ветви F, а также на ветви H - не уверен, что происходит с слияния совершить, если введено любое слияние изменений относительно D ..

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