Git Rebasing: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
No edit summary
Line 6: Line 6:


=Overview=
=Overview=
<font color=darkgray>
There are two situations when rebasing is useful: on an individual branch, to coalesce several logically-related commits into one, or when two connected branches are involved, to shift [[Git_Concepts#Head_Branch|head branch]] commits relative to the [[Git_Concepts#Base_Branch|base branch]] commits. This last situation is useful when we intend to merge the branches and we want to avoid a merge commit - the [[Git_Concepts#Base_Branch|base branch]] can simply be fast forwarded with the commits from the [[Git_Concepts#Head_Branch|head branch]].


Rebasing can be used on single branch to squash commits, or when two branches are involved, to shift the commits of the [[Git_Concepts#Head_Branch|head branch]] relative to the commits of the [[Git_Concepts#Base_Branch|base branch]].
Rebasing [[#Rewriting_History|rewrites history]], by removing the commits that are being rebased and creating new, equivalent ones.
 
Be aware that rebasing [[#Rewriting_History|rewrites history]].
 
 
 
</font>


=Rewriting History=
=Rewriting History=

Revision as of 00:19, 7 August 2019

Internal

Overview

There are two situations when rebasing is useful: on an individual branch, to coalesce several logically-related commits into one, or when two connected branches are involved, to shift head branch commits relative to the base branch commits. This last situation is useful when we intend to merge the branches and we want to avoid a merge commit - the base branch can simply be fast forwarded with the commits from the head branch.

Rebasing rewrites history, by removing the commits that are being rebased and creating new, equivalent ones.

Rewriting History

Rebasing removes the commits that have been applied to the target branch from repository.

Practical Use Cases

Moving a Branch Forward

You are working on a feature branch, named "A", created when the "develop" branch HEAD was commit "ef5". You committed work on the "A" branch, and your commit is "3ba". After a while, you want to apply your changes on the HEAD of "develop", since "develop" has evolved and you want to try

On branch task/of/PLAT-15252
Your branch and 'origin/task/of/PLAT-15252' have diverged,
and have 164 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Rebasing at the HEAD of the Base Branch

This procedure takes all commits from the head branch that diverged from the base branch, squashes them into one, and applies to the HEAD of the base branch.

You will be given the chance to squash extraneous commits. Change "pick" into "s" for the commits you want squashed into the previous (above) commits.

You will then be given the chance to edit comments.

If you don't want to squash, you can omit -i.
On branch topic/...
Your branch and 'origin/topic/...' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
git push --force

You can delete the branch (locally and remotely)