解决冲突后,不是我的git状态文件

时间:2016-02-19 10:11:50

标签: git

我做了git pull,Git告诉我:

  

错误:合并后将覆盖对以下文件的本地更改:   ..文件列表...   请在合并之前提交更改或存储更改。

好的,我在Git中添加了文件,提交了我的更改,然后我再次git pull,Git显示:

  

自动合并失败;修复冲突,然后提交结果

所以我修复了有问题的文件,我做了git status。但是列表中有很多文件我没有改变。它们看起来像是我拉的文件。这是正常的还是在我提交之前我必须做些什么?

4 个答案:

答案 0 :(得分:1)

正如其他答案所述,这是预期的行为。它的行为是这样的原因是因为Git存储提交的方式。

让Git知道中的每个文件,而不仅仅是它修改/添加的文件。但是,出于优化原因,文件不会重复。相反,Git将 point 提交给存储在文件数据库中的文件。

文件根据其内容存储在数据库中,因此将重用具有完全相同内容的文件。实际上,这意味着如果您将文件提交到存储库并且永远不会再次更改它,则所有提交都将指向文件数据库中的相同条目

假设您有以下提交历史记录:

* d787d (master) Change line #2 of A.txt
| * c565c (feature/something) Change line #1 of A.txt
|/
* b343b Add file B.txt
* a121a Add file A.txt

在这种情况下:

  • a121a指向文件数据库中的条目A1
  • b343b指向条目A1B1
  • c565c指向条目A2 *和B1
  • d787d指向条目A3 *和B1

*因为A.txt的内容已经改变,Git必须在文件数据库中创建一个新条目

当您要求将分支feature/something合并到master时,Git会看到它需要以某种方式将A2A3合并到一个新条目A4中(如果它不能自动执行此操作,它将要求您手动修复冲突),因此提交历史记录将为:

* e909e (master) Merge branch 'feature/something'
|\
| * c565c (feature/something) Change line #1 of A.txt
* | d787d Change line #2 of A.txt
|/
* b343b Add file B.txt
* a121a Add file A.txt

e909e会指向条目A4B1

话虽如此,您在git status中看到的文件是Git(或您)必须合并的所有文件,以便将两个分支合并在一起。

请记住,这是Git中实际工作方式的简化模型。如果您有兴趣了解更多信息,请阅读Git的internals

答案 1 :(得分:0)

每当你拉新代码时,有时会因为两个分支的代码发生变化而发生冲突。

您面临的情况是正常的。

简单地说,添加修复冲突的文件并提交它们。

答案 2 :(得分:0)

这是正常行为。

您看到的是合并中所有文件的完整列表,即使您只添加了一个文件。

无需担心,只需推动您的更改。

在此处阅读更多相关信息:
http://www.gitguys.com/topics/merging-with-a-conflict-conflicts-and-resolutions/

当git merge时,所有可以自动合并的文件都会自动合并并暂存。无法自动合并的文件会在您的工作区域中使用冲突标记进行更新,您必须修复它们。

这就是你看到很多文件的原因。

答案 3 :(得分:0)

您看到的更改不仅包括您的文件,还包括您要合并的所有文件。确保在合并提交中包含所有这些文件。如果不这样做,您将撤消其他人的更改。