git rerere diff输出的第一部分是什么?

时间:2014-12-08 17:31:38

标签: git diff git-rerere

我正在研究Git - Rerere section of the Git Book。我刚刚运行git checkout master; git merge rerere2; git rerere diff。这是输出。

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

有三个差异部分。

  1. <<<<<<<显示了什么?
  2. <<<<<<< HEAD显示了HEAD分支机构想要贡献的内容。
  3. >>>>>>> rerere2显示了rerere2分支机构想要贡献的内容。
  4. 看起来第一个差异部分是对rerere2想要贡献的内容的否定。但是,这对我来说没有意义。第一部分是什么意思?

2 个答案:

答案 0 :(得分:2)

答案

询问git rerere diff的第一部分是什么意思很好但是误入歧途。相反,请检查-+注释。来自Git Book

  

git rerere diff将显示解决方案的当前状态 - 您开始解决的问题以及您已解决的问题。

任何以-no prefix为前缀的内容都是您开始解决的问题

<<<<<<<                           
  puts 'hello mondo'              
=======
  puts 'hola world'                           
>>>>>>>

任何以+no prefix为前缀的内容都是您已将其解析为的内容(并且是您目前在工作目录中所拥有的内容):

<<<<<<< HEAD                      
   puts 'hola world'               
=======                           
  puts 'hello mondo'              
>>>>>>> rerere2                   

详细说明

工作目录的内容

合并后,工作目录立即包含:

def hello
<<<<<<< HEAD
  puts 'hola world'
=======
  puts 'hello mondo'
>>>>>>> rerere2
end

git diff

的输出

git diff的输出是这个并使用组合的diff标记:

  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

如果我们查看simple.rb的工作目录文件,这是真的。它的内容与git diff输出相同,但没有我们的/他们的标记。

git rerere diff

的输出

git rerere diff的输出是这个,不使用组合的diff格式。

 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
  • -的任何内容都是您开始使用
  • 的一部分
  • +的任何内容都是您决心
  • 的一部分
  • 任何没有前缀的内容都是
  • 的一部分

如果我们查看具有-注释的内容,我们就有了这个:

-<<<<<<<                           
-  puts 'hello mondo'              
-=======                           
->>>>>>>

这表示左侧带来puts 'hello mondo'而右侧带来任何东西。如果我们看一下+的内容,我们就有了这个:

+<<<<<<< HEAD                      
   puts 'hola world'               
+=======                           
+  puts 'hello mondo'              
+>>>>>>> rerere2                   

这正是目前工作目录中的内容。

答案 1 :(得分:0)

从该链接

git rerere diff将显示解决方案的当前状态 - 您开始解决的问题以及您已解决的问题。

git rerere保存合并选择。因此,它描述了它将要做的事情。第一部分是解决方案的输入之一。最后一部分是合并的输出。

$ 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

本节告诉你它在做什么。它想从一个文件和hola世界中取出hello mundo,并用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

采取&#34;你好mundo&#34;和&#34; hola world&#34;并用hola mundo替换该行