Какой первый раздел в выводе git rerere diff?

Я работаю через раздел Git - Rerere в 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 филиал хочет внести свой вклад.

Похоже, что первый раздел различий является отрицанием того, что rerere2 хочет внести свой вклад. Это не имеет смысла для меня, хотя. Что означает первый раздел?

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                   

Детальное объяснение

Содержание Working Dir

Сразу после слияния рабочий каталог содержит:

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

Если мы посмотрим на рабочий файл dir файла 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                   

Это именно то, что сейчас находится в рабочем каталоге.

По этой ссылке

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

Этот раздел рассказывает вам, что он думает о том, чтобы делать. Он хочет извлечь hello mundo из одного файла и hola world из другого и заменить его на 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

Принимает "привет мундо" и "мир hola" и заменяет эту строку на "hola mundo"

Другие вопросы по тегам