Git将diff接口文本添加到版本化文件中

时间:2013-07-14 10:42:58

标签: git

我让Git将diff命令的界面输出添加到文件行:

$ git pull
U       public_html/spider/spider.php
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.

$ git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 2 and 1 different commit each, respectively.
#
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both modified:      spider.php
#
no changes added to commit (use "git add" and/or "git commit -a")

$ git diff spider.php
diff --cc public_html/spider/spider.php
index a89b8ef,4b091a7..0000000
--- a/public_html/spider/spider.php
+++ b/public_html/spider/spider.php
@@@ -136,13 -136,7 +136,17 @@@ if ( isset($_SERVER['HTTP_USER_AGENT']
                                $providersList[] = $p['name'];
                        }
                }
++<<<<<<< HEAD
+
+              if ( ensure_fields($input, 'version') ) {
+                      $output['providers'] = $providers;
+              } else {
+                      $output['providers'] = $providersList;
+              }
+
++=======
+               $output['providers'] = $providersList;
++>>>>>>> 5de401379b275bdb805298fd3db919028506cc60
                $logData['providers'] = implode(', ', $providersList);

                echo json_encode($output);

$ git add spider.php

$ git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 2 and 1 different commit each, respectively.
#
# Changes to be committed:
#
#       modified:   spider.php
#

现在,当我打开spider.php文件时,我发现这个,直接从VIM复制:

- bruno:spider$ vim spider.php
135             if ( $p['url']!='' ) {
136                 $providersList[] = $p['name'];
137             }
138         }
139 <<<<<<< HEAD
140 
141         if ( ensure_fields($input, 'version') ) {
142             $output['providers'] = $providers;
143         } else {
144             $output['providers'] = $providersList;
145         }
146 
147 =======
148         $output['providers'] = $providersList;
149 >>>>>>> 5de401379b275bdb805298fd3db919028506cc60
150         $logData['providers'] = implode(', ', $providersList);
151 
152         echo json_encode($output);

编辑文件的唯一机器是这台(本地)机器。在这种情况之前,唯一不寻常的Git用法是在commit --amend之后的push。可能导致这种情况?如果没有,那又怎样?这是一个Git bug,因为它看起来似乎是?

1 个答案:

答案 0 :(得分:3)

部分a)为什么要合并?

这不是100%明确的,但可能是:

你有:

A--B--C--D

你推了这个,然后修改D得到:

A--B--C--D'

然后在某个时候你拉了回来提交D,你先前推了,这与你后来创建的D'没有正式的关系。此时,需要合并来创建D和D'的后继提交。这就是出问题的地方。

如上所述,我不能完全确定它是这样展开的,但你所拥有的肯定是合并出错了。

b)合并如何发生以及如何解决冲突?

git尝试自动进行合并,如果提交D和D'同时更改不同文件或一个文件的不同部分,则文件会自动更改,您只需执行git commit即可确认。如果D和D'都改变了一个文件的相同部分(并且不以完全相同的方式改变它),则会发生合并冲突,git会要求您解决它。因此它将冲突标记放在文件中,它们看起来像这样:

139 <<<<<<< HEAD
140 
141         if ( ensure_fields($input, 'version') ) {
142             $output['providers'] = $providers;
143         } else {
144             $output['providers'] = $providersList;
145         }
146 
147 =======
148         $output['providers'] = $providersList;
149 >>>>>>> 5de401379b275bdb805298fd3db919028506cc60

冲突标记告诉您此部分有两个版本,一个来自<<<<====,另一个来自====>>>>HEAD和散列用于通过提交标识相应的版本。您有责任通过选择任一版本或保留两个版本(一个接一个,按正确的顺序)或创建一个全新的版本(希望两个版本的组合效果)将文件带到其已解析的版本。你可以使用你选择的文本编辑器来做到这一点,或者你可以使用像git mergetool这样的工具。当您对结果感到满意时,可以git commit确认合并。

你(可能)所做的是“什么都不做并且提交”因此告诉git文件合并正常,即使你没有对你拉动时放置的冲突标记git做任何事情。