git-rerere man page on OpenBSD

Man page or keyword search:  
man Server   11362 pages
apropos Keyword Search (all sections)
Output format
OpenBSD logo
[printable version]



GIT-RERERE(1)					    GIT-RERERE(1)

NAME
       git-rerere - Reuse recorded resolution of conflicted merges

SYNOPSIS
       git rerere [clear|forget [<pathspec>]|diff|status|gc]

DESCRIPTION
       In  a  workflow	employing  relatively  long  lived topic branches, the
       developer sometimes needs to resolve the same conflicts over  and  over
       again until the topic branches are done (either merged to the "release"
       branch, or sent out and accepted upstream).

       This command assists the developer in this process  by  recording  con-
       flicted automerge results and corresponding hand resolve results on the
       initial manual merge, and applying previously recorded hand resolutions
       to their corresponding automerge results.

	      Note

	      You  need	 to  set  the configuration variable rerere.enabled in
	      order to enable this command.

COMMANDS
       Normally, git rerere is run  without  arguments	or  user-intervention.
       However,	 it  has  several  commands that allow it to interact with its
       working state.

       clear  This resets the metadata used by rerere if a merge resolution is
	      to  be  aborted.	Calling	 git am [--skip|--abort] or git rebase
	      [--skip|--abort] will automatically invoke this command.

       forget <pathspec>
	      This resets the conflict resolutions which rerere	 has  recorded
	      for  the	current	 conflict  in  <pathspec>.  The	 <pathspec> is
	      optional.

       diff   This displays diffs for the current state of the resolution.  It
	      is  useful  for  tracking	 what  has  changed  while the user is
	      resolving conflicts. Additional arguments are passed directly to
	      the system diff command installed in PATH.

       status Like  diff,  but	this  only  prints  the filenames that will be
	      tracked for resolutions.

								1

GIT-RERERE(1)					    GIT-RERERE(1)

       gc     This prunes records of conflicted merges that  occurred  a  long
	      time  ago.  By  default, unresolved conflicts older than 15 days
	      and resolved conflicts older than	 60  days  are	pruned.	 These
	      defaults	 are   controlled   via	 the  gc.rerereunresolved  and
	      gc.rerereresolved configuration variables respectively.

DISCUSSION
       When your topic branch modifies an overlapping area  that  your	master
       branch  (or  upstream)  touched since your topic branch forked from it,
       you may want to test it with the latest master, even before your	 topic
       branch is ready to be pushed upstream:

       .ft C
		     o---*---o topic
		    /
	   o---o---o---*---o---o master
       .ft

       For such a test, you need to merge master and topic somehow. One way to
       do it is to pull master into the topic branch:

       .ft C
	       $ git checkout topic
	       $ git merge master

		     o---*---o---+ topic
		    /		/
	   o---o---o---*---o---o master
       .ft

       The commits marked with * touch the same area in	 the  same  file;  you
       need  to	 resolve  the  conflicts  when creating the commit marked with
       {plus}. Then you can test the result to make sure your work-in-progress
       still works with what is in the latest master.

       After  this test merge, there are two ways to continue your work on the
       topic. The easiest is to build on top of the test merge commit  {plus},
       and when your work in the topic branch is finally ready, pull the topic
       branch into master, and/or ask the upstream to pull from you.  By  that
       time,  however,	the  master  or	 the upstream might have been advanced
       since the test merge {plus}, in which case the final commit graph would
       look like this:

								2

GIT-RERERE(1)					    GIT-RERERE(1)

       .ft C
	       $ git checkout topic
	       $ git merge master
	       $ ... work on both topic and master branches
	       $ git checkout master
	       $ git merge topic

		     o---*---o---+---o---o topic
		    /		/	  \
	   o---o---o---*---o---o---o---o---+ master
       .ft

       When  your topic branch is long-lived, however, your topic branch would
       end up having many such "Merge from master" commits on it, which	 would
       unnecessarily  clutter  the  development	 history. Readers of the Linux
       kernel mailing list may remember that Linus complained about  such  too
       frequent	 test  merges when a subsystem maintainer asked to pull from a
       branch full of "useless merges".

       As an alternative, to keep the topic branch clean of test  merges,  you
       could  blow  away  the  test merge, and keep building on top of the tip
       before the test merge:

       .ft C
	       $ git checkout topic
	       $ git merge master
	       $ git reset --hard HEAD^ ;# rewind the test merge
	       $ ... work on both topic and master branches
	       $ git checkout master
	       $ git merge topic

		     o---*---o-------o---o topic
		    /			  \
	   o---o---o---*---o---o---o---o---+ master
       .ft

       This would leave only one  merge	 commit	 when  your  topic  branch  is
       finally	ready  and  merged  into  the  master branch. This merge would
       require you to resolve the conflict, introduced by the  commits	marked
       with  *. However, this conflict is often the same conflict you resolved
       when you created the test merge you blew away.  git  rerere  helps  you
       resolve	this  final  conflicted	 merge using the information from your
       earlier hand resolve.

								3

GIT-RERERE(1)					    GIT-RERERE(1)

       Running the git rerere command immediately after a conflicted automerge
       records	the  conflicted	 working  tree	files, with the usual conflict
       markers <<<<<<<, =======, and >>>>>>> in them.  Later,  after  you  are
       done  resolving the conflicts, running git rerere again will record the
       resolved state of these files. Suppose you did this  when  you  created
       the test merge of master into the topic branch.

       Next  time,  after  seeing  the	same conflicted automerge, running git
       rerere will perform a three-way merge between  the  earlier  conflicted
       automerge,  the	earlier	 manual resolution, and the current conflicted
       automerge. If this three-way merge  resolves  cleanly,  the  result  is
       written	out  to your working tree file, so you do not have to manually
       resolve it. Note that git rerere leaves the index file  alone,  so  you
       still need to do the final sanity checks with git diff (or git diff -c)
       and git add when you are satisfied.

       As a convenience measure, git merge automatically  invokes  git	rerere
       upon  exiting  with  a failed automerge and git rerere records the hand
       resolve when it is a new conflict, or reuses the earlier	 hand  resolve
       when  it	 is  not. git commit also invokes git rerere when committing a
       merge result. What this means is that you do not have  to  do  anything
       special yourself (besides enabling the rerere.enabled config variable).

       In our example, when you do the test merge, the	manual	resolution  is
       recorded, and it will be reused when you do the actual merge later with
       the updated master and topic branch, as long as the recorded resolution
       is still applicable.

       The  information	 git  rerere  records  is  also	 used when running git
       rebase. After blowing away the test merge and continuing development on
       the topic branch:

       .ft C
		     o---*---o-------o---o topic
		    /
	   o---o---o---*---o---o---o---o   master

	       $ git rebase master topic

					 o---*---o-------o---o topic
					/
	   o---o---o---*---o---o---o---o   master
       .ft

       you  could  run	git  rebase master topic, to bring yourself up-to-date

								4

GIT-RERERE(1)					    GIT-RERERE(1)

       before your topic is ready to be sent upstream. This  would  result  in
       falling	back  to a three-way merge, and it would conflict the same way
       as the test merge you resolved earlier. git rerere will be run  by  git
       rebase to help you resolve this conflict.

AUTHOR
       Written by Junio C Hamano <gitster@pobox.com: mailto:gitster@pobox.com>

GIT
       Part of the git(1) suite

								5

[top]

List of man pages available for OpenBSD

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net