rebase-commits.rst
118 lines
| 4.0 KiB
| text/x-rst
|
RstLexer
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 | ||||