merging.rst
110 lines
| 4.0 KiB
| text/x-rst
|
RstLexer
r1 | .. _merging: | ||
Merging in |hg| | |||
=============== | |||
Sometimes you will need to fix conflicts when merging files. In |hg| there | |||
are a number of different options which you can use for handling merging, and | |||
you can set your preferred one in the :file:`~/.hgrc` file. The options fall | |||
into two categories *internal merging* or *tool merging*. | |||
Internal merging marks the files with the ``<<<<<``, | |||
``>>>>>``, and ``=======`` symbols denoting the position of the conflict | |||
in the file and you resolve the changes on your terminal. The following | |||
example sets `Meld`_ as the merge handler. | |||
.. code-block:: ini | |||
[ui] | |||
merge = internal:merge | |||
Tool merging differs slightly depending on the tool you use, but they will | |||
all do the same thing. Highlight the conflict area in some manner, and allow | |||
you to make the necessary changes to resolve the conflicts. Set a merge tool | |||
using the following example. | |||
.. code-block:: ini | |||
[merge-tools] | |||
meld3.executable = /usr/local/bin/meld | |||
For more detailed information, see the :ref:`basic-vcs-cmds` section, or the | |||
`Mercurial merge-tools`_ documentation. Use the following example steps to | |||
handle merging conflicts. | |||
1. Check the list of conflicts on the command line, in this example | |||
you can see the list as the ``default`` and ``stable`` branches are in the | |||
process of being merged. | |||
.. code-block:: bash | |||
:emphasize-lines: 10-12,16-17,20-21 | |||
$ hg branch | |||
stable | |||
$ hg merge default | |||
note: using 4480fbc4562c as ancestor of 7c9a8dfb9dd6 and fbefb727a452 | |||
alternatively, use --config merge.preferancestor=a1e8bd6df0ce | |||
merging default.nix | |||
merging docs-internal/changelog.rst | |||
merging rhodecode/VERSION | |||
merging rhodecode/controllers/api/utils.py | |||
warning: conflicts during merge. | |||
merging rhodecode/controllers/api/utils.py incomplete! | |||
(edit conflicts, then use 'hg resolve --mark') | |||
merging rhodecode/lib/diffs.py | |||
merging rhodecode/model/scm.py | |||
merging rhodecode/tests/api/test_utils.py | |||
warning: conflicts during merge. | |||
merging rhodecode/tests/api/test_utils.py incomplete! | |||
(edit conflicts, then use 'hg resolve --mark') | |||
merging rhodecode/tests/models/test_scm.py | |||
warning: conflicts during merge. | |||
merging rhodecode/tests/models/test_scm.py incomplete! | |||
(edit conflicts, then use 'hg resolve --mark') | |||
merging vcsserver/default.nix | |||
merging vcsserver/vcsserver/VERSION | |||
42 files updated, 7 files merged, 2 files removed, 3 files unresolved | |||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | |||
2. Open each of the highlighted files, and fix the conflicts in each. Each merge | |||
conflict will look something like the following example, with the ``<<<<<``, | |||
``>>>>>``, and ``=======`` symbols denoting the position of the conflict | |||
in the file. You need to fix the content so that it is correct. | |||
.. code-block:: python | |||
# Change this example conflict | |||
def pre_request(worker, req): | |||
<<<<<<<<<<<<<< | |||
worker.log.debug("[%s] PRE WORKER: %s" %(worker.pid, req.method)) | |||
=============== | |||
worker.log.debug("[%s] PRE WORKER: %s %s" % (worker.pid, req.method, | |||
req.path)) | |||
>>>>>>>>>>>>>> | |||
# To this working code | |||
def pre_request(worker, req): | |||
worker.log.debug("[%s] PRE WORKER: %s %s" % (worker.pid, req.method, | |||
req.path)) | |||
3. Once you have finished fixing the conflicts, you need to mark them as | |||
resolved, and then commit the changes. | |||
.. code-block:: bash | |||
# Mark the merges as resolved | |||
$ hg resolve --mark | |||
# Commit the changes | |||
$ hg commit -m "merge commit message" | |||
5. Once you have finished your merge, if the the original |repo| history on | |||
the server is different you have two options: | |||
* Push 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. | |||
.. _Mercurial merge-tools: https://mercurial.selenic.com/wiki/MergeToolConfiguration | |||
.. _Meld: http://meldmerge.org/ |