为什么说git"都被修改了#34;冲突后输出git状态?

时间:2014-08-17 12:36:09

标签: git

当尝试在git中合并时文件发生冲突时,git在有这样冲突的文件上说both modified

$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)

      both modified: file1

no changes added to commit (use "git add" and/or "git commit -a")

不确定为什么&#34; 两者已修改&#34;。你们有谁知道吗?

1 个答案:

答案 0 :(得分:18)

这回到Git 1.6.5(2009年10月)和commit 4d4d572,它引入了这个更详细的信息:

status:分别显示冲突路径的工作树状态

  

当路径在索引中取消合并时,我们过去常常在&#34;已更改但未更新&#34;中更改说&#34;未合并&#34; 部分,即使在工作树中删除了路径。

     

从&#34;更新&#34>中删除未合并的条目部分,创建一个新的部分&#34;未合并的路径&#34;。在这个新的部分中描述不同阶段如何更详细地冲突

正如你在这个补丁中看到的那样,&#34;两者都被修改了#34; (在父母双方中)不是唯一的冲突案例。

case 1: how = "both deleted:"; break;
case 2: how = "added by us:"; break;
case 3: how = "deleted by them:"; break;
case 4: how = "added by them:"; break;
case 5: how = "deleted by us:"; break;
case 6: how = "both added:"; break;
case 7: how = "both modified:"; break;

您在commit 173e6c8中看到更多案例,git status -s

  

对于未合并的条目,

     
      
  • X显示阶段#2(即ours)和
  • 的状态   
  • Y显示阶段#3的状态(即theirs)。
  •   
X          Y     Meaning
-------------------------------------------------
D           D    unmerged, both deleted
A           U    unmerged, added by us
U           D    unmerged, deleted by them
U           A    unmerged, added by them
D           U    unmerged, deleted by us
A           A    unmerged, both added
U           U    unmerged, both modified

这表明git中的索引具有 3个阶段(参见&#34; How do I force git to think a file is unmerged?&#34;)

  

在Git文件中,合并冲突(通常)索引中有三个版本,工作区中的版本包含diff3 -E / rcsmerge冲突标记。

     
      
  • 索引中的版本是共同祖先的第1阶段,
  •   
  • 第二阶段为&#34;我们的&#34;版本和
  •   
  • 第3阶段为&#34;他们的&#34;版。
  •   
     

对于未合并的文件,第0阶段没有版本

在这里,&#34;两者都经过修改&#34;在我们的&#39;中进行了修改。和他们的&#39;。