-
Git Rebase is the ability
to take existing commits,
-
and to place them on a branch
that starts today.
-
♪ (jazzy theme music throughout) ♪
-
Creating a branch is a tough decision.
-
Start it today, or start it later?
-
Well, some important fixes
might be happening right now.
-
So better wait until tomorrow.
-
That difficult decision
has gone away with Git.
-
Start a branch whenever you like,
-
and make it contain the changes
that you intend to deliver.
-
Focused on a particular feature,
-
bug fix, or objective.
-
What about wanting this to start
-
at a later place in history,
-
in order to incorporate those hot fixes
-
that are going on to the master branch?
-
No problem.
Rebase to the rescue.
-
Rebase, in its standard usage form,
-
allows one branch to be relocated
farther down the history track,
-
meaning taking all of the changes
that are isolated on your branch,
-
and acting as if they happened after
-
all of the modern work
on the master branch.
-
This accomplishes the same thing,
but with cleaner history,
-
than doing a reverse merge
-
from the master branch
to the feature branch.
-
The same contents will be present
in the feature branch,
-
but without the complication of the merge,
-
going into that feature branch,
and recorded in its history.
-
It's important to note
that the rebase command
-
is altering all of the commits
present in the branch.
-
It's preserving all of the work you did,
-
but their location and relationship
to other commits
-
is all changing.
-
This is primarily used for a branch
that you only own,
-
and isn't being worked on by others.
-
The change in the relationship,
-
and identifier for each of those commits,
-
makes it difficult to reconcile
with the work of others.
-
We're primarily talking about a branch
that you are focused on.
-
But with those constraints in place,
the use is quite simple.
-
git checkout to the feature branch,
-
git rebase on the source branch,
typically master.
-
That will then iteratively walk through
all of the commits
-
that have happened on the feature branch,
-
and replay them as if they were being
robotically rewritten,
-
starting from the latest point in time
on the master branch.
-
When the process completes,
-
after seeing it step through
all of the individual commits,
-
it will let you know that
the rebase is complete,
-
and you'll return to the command prompt
-
and what appears to be a similar state
-
to before you ran that instruction.
-
However, all of those historical commits
now have new identifiers,
-
keep that in mind.
-
You'll find a request to use this pattern
-
is most common in open source projects.
-
It's because they want to optimize
-
for future readership of the code base.
-
A single straight line of history
provides the easiest reading
-
for a future contributor to this project.
-
This is why they put the burden
on the contributors,
-
to make the history clean.
-
It's an effort, but one that benefits
-
every future collaborator on this project.
-
Continuously delivered applications,
-
such as web services, and web apps,
-
are optimized, generally,
for merges, not rebase.
-
They want the quickest possible
delivery mechanism
-
to send a change, small and focused,
into the master branch.
-
If that doesn't do
everything that it should,
-
another branch is worked on,
and merged back in again.
-
Rebase is a powerful feature
-
that lets you optimize
for clarity of history.
-
Just bear in mind the needs
of your project and your team.
-
If it is for quick delivery
of feature branches,
-
just merge them in.
-
If it's for clarity of history,
engage in using Rebase.
-
Thanks for watching this
Git & GitHub Foundations
-
episode on Rebase.
-
Be sure to subscribe
to our channel, over here,
-
ask us questions or comments
in the box below,
-
or watch one of the related episodes,
such as on creating a branch.