##// END OF EJS Templates
gists: use left-sided action button
gists: use left-sided action button

File last commit:

r1:854a839a default
r4123:54164c4e default
Show More
rebase-commits.rst
118 lines | 4.0 KiB | text/x-rst | RstLexer
project: added all source files and assets
r1 .. _rebase-rebase:
How to Rebase in |hg|
=====================
To rebase in |hg| you will need the ``rebase`` extensions enabled in your
:file:`~/.hgrc` file. Use the following example, or for more detailed
information see the :ref:`config-hgrc` section.
.. code-block:: ini
[extensions]
rebase =
Rebasing in |hg|
----------------
Occasionally you may have to rebase commits if you have created a new head on
your fork. In short, rebasing mean taking one commit and moving a commit, or
set of commits, from a different head on top of it. To do this, use the
following example:
1. Check your on the right branch, and move to the correct one if needed.
.. code-block:: bash
# Display which branch you are on
$ hg branch
default
# Move to the stable branch
$ hg update stable
2. Look at your graphlog, and decide what commits need to be rebased. In this
case, I want to rebase 1206 and 1207 on top of 1226. Note how these are
already in a public state as I have already pushed to my fork.
.. code-block:: bash
:emphasize-lines: 1,13,17
| o 1226:1046ed30734d [stable] - public
| | 3 days ago by Oliver Strobel | B:,T:
| | enterprise: catch failure to create repo_dir
| |
| o 1225:7aba10b8ee97 [stable] - public
| | 3 days ago by Oliver Strobel | B:,T:
| | control: bump version to 1.1.9
| |
o | 1208:0ef7c9d4c1cc [default] - public
| | 2 weeks ago by Oliver Strobel | B:,T:
| | Added tag 1.1.7 for changeset 3acf64b88845
| |
| | @ 1207:39562e195e34 [stable] - public
| | | 3 weeks ago by Brian | B:,T:
| | | docs: note added to *rccontrol install* regarding overwriting DB
| | |
| | o 1206:39562e195e34 [stable] - public
| |/ 3 weeks ago by Brian | B:,T:
| | docs: update command line install example
3. To do this use the following example.
* Draft the commits back to the source revision.
* ``-s`` is the source, essentially what you are rebasing.
* ``-d`` is the destination, which is where you are putting it.
Rebasing the source commit will automatically rebase its descendants. In this
example I am using ``--force`` to draft commits already pushed to my fork.
Doing this is not best practices on a main |repo|.
.. code-block:: bash
# Put the commits into draft status
# This will draft all subsequent commits on the relevant branch
hg phase --draft --force -r 1206
# Rebase 1206 on top of 1226
$ hg rebase -s 1206 -d 1226
saved backup bundle to /repo-fork/.hg/strip-backup/39562e195e34-backup.hg
4. Once you have rebased the commits, check them on the graphlog
.. code-block:: bash
:emphasize-lines: 1,5,9
o 1233:707ef1590e71 [stable] - draft
| 3 weeks ago by Brian | B:,T:tip
| docs: note added to *rccontrol install* regarding overwriting DB
|
o 1232:707ef1590e71 [stable] - draft
| 3 weeks ago by Brian | B:,T:tip
| docs: update command line install example
|
@ | 1225:1046ed30734d [stable] - draft
| | 3 days ago by Oliver Strobel | B:,T:
| | enterprise: catch failure to create repo_dir
5. Once you have finished your rebase, if the the original |repo| history on
the server is different you have two options:
* Push the specific revisions using ``hg push -r <revision>``, or push all
with force using ``hg push --force`` which will create a new head.
* Strip your commits on the server back to a previous revision, and then push
the new history. To strip commits on the server, see the ``strip``
information in the :ref:`api` documentation.
.. important::
As with all examples, this one is rather straight forward but rebasing can
become a complicated affair if you need to fix merges and conflicts
during the rebase. For more detailed rebasing information, see the
`Mercurial Rebase`_ page which has more detailed instructions for various
scenarios.
.. _Mercurial Rebase: https://mercurial.selenic.com/wiki/RebaseExtension
.. _Mercurial Phases: https://mercurial.selenic.com/wiki/Phases