118 lines
4 KiB
ReStructuredText
118 lines
4 KiB
ReStructuredText
.. _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
|
|
|