문제

i.e. how do I go from

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

to

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

Obviously its now clear that CD should have been in a feature branch, as that change is now delayed.

This is a subtly different issue to the others I've seen here and and here

도움이 되었습니까?

해결책 2

This answer assumes you either haven't pushed master or you're the only person working on the project (in which case it doesn't really matter). If you have pushed master and someone else pulled your changes, you'll need to communicate with them to make sure they update their repositories appropriately.

                                  # 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 documentation has a pretty good graphical explanation of what rebase --onto does.


If you want to avoid a rebase altogether, you should be able to do

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

This will result in a history like this

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

Anyone who checks out master, will see code as if commits C and D never happened, you'll just have a couple of reverts in your history. That's the preferred way of backing changes out of a branch that has been pushed.

다른 팁

Starting at the HEAD (G) of master:

git branch feature D  # Create new branch at D.
git rebase -i B       # Use interactive rebase to remove C D from master.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top