Reputation: 141732
I am working through the Git - Rerere section of the Git Book. I have just run git checkout master; git merge rerere2; git rerere diff
. Here is the output.
PS> git rerere diff
--- a/simple.rb
+++ b/simple.rb
@@ -1,9 +1,9 @@
#! /usr/bin/env ruby
def hello
-<<<<<<<
- puts 'hello mondo'
-=======
+<<<<<<< HEAD
puts 'hola world'
->>>>>>>
+=======
+ puts 'hello mondo'
+>>>>>>> rerere2
end
There are three diff sections.
<<<<<<<
shows what? <<<<<<< HEAD
shows what the HEAD
branch wants to contribute.>>>>>>> rerere2
shows what the rerere2
branch wants to contribute.It looks like the first diff section is a negation of what rerere2
wants to contribute. That doesn't make sense to me, though. What does the first section mean?
Upvotes: 1
Views: 133
Reputation: 141732
Asking what the first section of git rerere diff
means is fine but misguided. Instead, examine the -
and +
annotations. From the Git Book:
git rerere diff
will show the current state of the resolution - what you started with to resolve and what you’ve resolved it to.
Anything prefixed with -
or no prefix
is what you started with to resolve:
<<<<<<<
puts 'hello mondo'
=======
puts 'hola world'
>>>>>>>
Anything prefixed with +
or no prefix
is what you've resolved it to (and is what you currently have in your working dir):
<<<<<<< HEAD
puts 'hola world'
=======
puts 'hello mondo'
>>>>>>> rerere2
Immediately after merge, the working directory contains:
def hello
<<<<<<< HEAD
puts 'hola world'
=======
puts 'hello mondo'
>>>>>>> rerere2
end
git diff
The output of git diff
is this and uses the combined diff markup:
def hello
++<<<<<<< HEAD in working dir but in neither ours/theirs
+ puts 'hola world' in working dir but not in theirs
++======= in working dir but in neither ours/theirs
+ puts 'hello mondo' in working dir but not in ours
++>>>>>>> rerere2 in working dir but in neither ours/theirs
end
If we look at the working dir file of simple.rb, this is true. It's contents are the same as the git diff
output but without the ours/theirs markers.
git rerere diff
And the output of git rerere diff
is this and does NOT use the combined diff format.
def hello
-<<<<<<< started with
- puts 'hello mondo' started with
-======= started with
+<<<<<<< HEAD resolved to
puts 'hola world' started with & resolved to
->>>>>>> started with
+======= resolved to
+ puts 'hello mondo' resolved to
+>>>>>>> rerere2 resolved to
end
-
is part of what you've started with+
is part of what you've resolved toIf we look at just what has the -
annotation, we have this:
-<<<<<<<
- puts 'hello mondo'
-=======
->>>>>>>
That says that the left side brings in puts 'hello mondo'
and the right side brings in nothing. If we look at just what has the +
, we have this:
+<<<<<<< HEAD
puts 'hola world'
+=======
+ puts 'hello mondo'
+>>>>>>> rerere2
That's exactly what is in the working directory right now.
Upvotes: 2
Reputation: 181
From that link
git rerere diff will show the current state of the resolution - what you started with to resolve and what you've resolved it to.
git rerere saves merging choices. So it's describing the thing's it's going to do. First section is one of the inputs for resolution. Last section is the output of the merge.
$ git rerere diff
--- a/hello.rb
+++ b/hello.rb
@@ -1,11 +1,11 @@
#! /usr/bin/env ruby
def hello
-<<<<<<<
- puts 'hello mundo'
-=======
+<<<<<<< HEAD
puts 'hola world'
->>>>>>>
+=======
+ puts 'hello mundo'
+>>>>>>> i18n-world
end
This section is telling you what it's thinking about doing. It wants to take out hello mundo from one file and hola world from another and replace it with hello mundo.
$ git rerere diff
--- a/hello.rb
+++ b/hello.rb
@@ -1,11 +1,7 @@
#! /usr/bin/env ruby
def hello
-<<<<<<<
- puts 'hello mundo'
-=======
- puts 'hola world'
->>>>>>>
+ puts 'hola mundo'
end
Takes "hello mundo" and "hola world" and replaces that line with hola mundo
Upvotes: 0