我让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,因为它看起来似乎是?
答案 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做任何事情。