0

我正在将同事的分支与master我们项目仓库中的分支合并。当我fetched将他的更改并尝试将merge它们放入主分支时,我遇到了一些冲突,所以我跑去git mergetool解决它们。

完成后merge,我正在查看 GitHub GUI 应用程序中的更改。从我同事的分支合并的所有文件都标记为“新”,即使它们根本不是新文件。如果我右键单击任何文件并单击“放弃更改”,如果我提交merge. 我相信有一个合乎逻辑的解释。如果我“放弃更改”,为什么文件会被删除?为什么文件在合并过程中被标记为“新”,即使它们已经存在了很长时间?

4

1 回答 1

0

不确定这是否是您遇到的问题,但听起来很像。Git 不跟踪文件,而是跟踪其内容。例如,如果您移动文件。使用git status您会看到一个文件已被删除,并且有一个新的未跟踪文件。

如果您将两个更改都添加到提交中,git 将检查它们的内容并假定文件已被重命名。哪个好。您甚至可以复制文件并添加它,因为内容相同,它会将其标记为副本。每个文件将在内部指向相同的Object. 这意味着副本或移动的文件将继承历史记录。

现在假设,在提交期间,您删除了提交的文件并在合并期间将其添加回来。(这可能是丢弃更改发生的情况)。Git 将看到该文件已被删除,然后创建了一个新文件。由于该文件在上一次提交中不存在,因此它会将其标记为新的,这是完全正确的。

另一个可能的原因是新文件有 100% 的更改。我不能肯定地说,但如果它发生了。如果 git 可能认为该文件已被新文件替换,我不会感到惊讶。

在旁注中,我建议git blame对标记为新的文件做一个。这将为您提供具有该名称的文件的更改。如果在每一行上,只有一个人和一个日期。这可能意味着该文件确实是新文件,并且 github 没有错误地将文件标记为新文件。如果有变化,那么 github 有问题。

编辑

如果还不算晚,我会考虑重做合并。如果没有新的东西被推送到合并的树中,那么修复它并不是一件可怕的事情。进行合并时,请确保将所有更改添加到变更集中。在合并期间,冲突文件不会被添加到暂存区。我不能说 mergetool 会自动将合并的文件添加到暂存中。无论如何git add {file},对所有这些文件执行 , 。如果文件已经存在,它不会改变任何东西。一旦你确定一切都是正确的。推它。您可能会遇到一个错误,即您尝试推送将覆盖提交的非快进提交。如果它不起作用,请尝试使用“git push -f”。它应该工作。

于 2013-07-03T16:09:44.077 回答