2017-01-23 1 views
2

У меня авария при разработке. У меня есть два коммиты, которые нуждаются в ветви А, но я нажал на ветку B. Таким образом, теперь, я хочу, чтобы переместить те обязательства по ветви А, а затем удалить их из филиала B. Пожалуйста, просмотрите изображение для детали:Git/исходное дерево перемещается по определенному значению в ветке B в ветку A

enter image description here

ответ

2

Прежде всего, перейдите к branchA и cherry-pick, которые вы хотите выбрать здесь.

$ git checkout branchA 
$ git cherry-pick <commit1>  # commit1 = 0a18e0f 
$ git cherry-pick <commit2>  # commit2 = e604ce4 

$ git push origin HEAD   # push to remote 

Теперь удалите два коммиты из branchB по revert или rebase. Возврат предпочтительнее, потому что он не изменяет историю гитов.

Revert:

$ git checkout branchB 
$ git revert <commit1> 
$ git revert <commit2> 
$ git push origin HEAD 

Rebase:

$ git checkout branchB 
$ git rebase -i efb2443   # go back to the commit before the two commmits you want to remove 

Now comment out (adding `#` before the commit hash) the two commits you want to remove. 

$ git push -f origin HEAD  # you need to force(-f) push as history is changed here by rebasing 
+0

мне нужно сделать что-нибудь еще после того, как вишневый выбрать (нажать код на сервер)? – lee

+0

Да, вам нужно нажать свой последний код на удаленный. –

+1

@lee Возможно, было бы лучше вернуть эти две коммиты на ветку B, а не удалять их с помощью интерактивной rebase ('rebase -i'). Если кто-то (или многие люди) вытащил изменения, которые вы ранее нажали на ветвь B, вы будете переписывать историю для них, когда вы (принудительно) нажимаете свою обновленную ветку. Это даст им головную боль, и против гет-этикета. – mattliu

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