如何移动最近的(但不是最新的)承诺一个新的分支(How do I move recent (but

2019-10-18 19:50发布

即如何从去


master : A-B-C-D-E-F-G

master: A-B-E-F-G
           \
feature:    C-D 

显然,它现在很清楚,CD本来应该在一个特性分支,为改变现在推迟。

这是一个微妙的不同问题我见过的人在这里和这里

Answer 1:

这个答案假定您要么没有推或者你的项目(在这种情况下,它并不重要)工作的唯一的人。 如果您有推主人和别人拉你的变化,你需要与他们沟通,以确保他们适当地更新自己的资料库。

                                  # Assuming you're on master
git branch <feature> <D>          # Create a branch named <feature> at commit <D>
git rebase --onto <B> <D> master  # Transplant branch

Git的底垫文件有什么不错的图形解释rebase --onto一样。


如果你想避免rebase干脆,你应该能够做到

git branch <feature> <D>          # Create a branch named <feature> at commit <D>
git revert <D>                    # undo D
git revert <C>                    # undo C

这将导致在这样的历史

A-B-C-D-E-F-G-!D-!C
      ^           ^
   feature      master

任何人谁检查出的主 ,会看到写代码,好像犯Cd从来没有发生过,你只需要一对夫妇就回到你的历史。 这是打了退堂鼓已推入一个分支的变化的首选方式。



Answer 2:

起始于HEAD的(G) master

git branch feature D  # Create new branch at D.
git rebase -i B       # Use interactive rebase to remove C D from master.


文章来源: How do I move recent (but not latest) commits to a new branch