You have a branch
feature-a. You finish it and submit it for review, and then branch off of
feature-a to start working on
feature-b which depends on your latest changes.
Your code is reviewed and some changes are requested. You update
feature-a, push, and merge. You want to keep
feature-b up to date, so you check it out and run
git rebase origin/master. However, your latest revisions lead to a self merge conflict when trying to rebase
feature-b off of master.
# Before code review# origin/mastermaster# feature-amaster -> feature-a# feature-bmaster -> feature-a -> feature-b# After code review# origin/master (using master as parent for consistency, though HEAD is now feature-a')master -> feature-a' # revised feature-a is now HEAD# feature-b (feature-a conflicts with feature-a')master -> feature-a -> feature-b
git rebase origin/master, use
git rebase --onto origin/master feature-a.
Specifically, this means "take all commits that are on top of
feature-a, and place them on top of
HEAD." In the common scenario where
feature-a is the only difference between
feature-b, it can be thought of as "drop all changes between