拉动时出现以下错误:
错误:将覆盖以下未跟踪的工作树文件 合并: [文件列表]。 请在合并之前移动或删除它们。
您对以下文件的本地更改将被覆盖 合并:[文件列表]。请提交您的更改或将其存储在您之前 可以合并。
我想接受所有列出文件的theirs
更改。但是,我不想删除任何其他文件!我也不想提交他们。有很多文件,我不想单独处理它们。
我找到了以下答案,这些答案看起来很完美并且使用了它们:
a) git pull -X theirs
b) git pull --strategy-option theirs
c) git fetch
git merge -X theirs
d) git fetch
git pull --strategy-option theirs
但我得到同样的错误。出了什么问题?我用git 2.7。
答案 0 :(得分:1)
您的(a),(b)和(c)方法都做同样的事情。请注意,git pull
仅为git fetch
,后跟git merge
。此外,-X
和--strategy-option
只是同一选项的替代拼写。您的方法(d)只连续运行两个git fetch
命令,后跟一个git merge
。
您展示的两个投诉都是关于名为files
的文件。但是,它们是不同的投诉,这意味着您已经对实际的错误消息做了些什么。无论如何,我会解决这两个案例:
未跟踪文件通常是不可合并的。通常,文件必须在所有三个提交中:合并基础提交和两个分支提示提交。 (在某些情况下,可以合并一个故意删除的文件,尽管其中许多情况会导致删除/修改冲突,Git无法自行解决。我怀疑你有这些情况之一。)
未提交的更改(对于跟踪的文件)很难(并且不建议)进行合并。
对于案例1:不清楚为什么名为files
的文件在提示提交中未被跟踪,但 存在于提示提交中。您可以git add
此文件并git commit
结果,但如果该文件不在合并库中,您将获得"添加/添加冲突"在此文件上,仍然需要手动解决它。
无法判断(根据您提供的信息)此文件是否在合并库中,但可能不是。最可能的方式是它在合并库中,从当前提交中丢失,并出现在他们最常见的提交中,如果你已经明确删除它(使用git rm
)并提交了这个结果,并且如果你这样做了,你现在就不会问这个了。
您最好的选择可能是将名为files
的文件移开。然后,您可以运行两个git fetch
和git merge
命令(可能通过运行一个git pull
命令 - 我通常建议将其分解为两个独立的组件,因为当事情发生时出错了,您需要采取不同的操作来解决问题,具体取决于哪一个失败,但对于" fetch&#34来说很少见;步骤失败)。合并完成后,您可以决定是选择他们的files
文件,还是原始files
文件,或两者的混合,并通过以下方式构建所需的最终files
文件手。
对于案例2:您修改了名为files
的文件,该文件存在于提示提交中,并且也存在于提示提交中。您尚未完成git add files
和git commit
。 强烈建议在尝试合并之前提交此更改。在提交文件之前,您不能使用git merge
将提示提交与提示提交合并。 (无论如何 可以尝试合并,但不能与git merge
一起尝试,而不是自Git 1.5.0.2版以来。但不要这样做。)
我想接受所有列出文件的更改。但是,我不想删除任何其他文件!我也不想承诺。有很多文件,我不想单独处理它们。
您只显示了一个名为files
的文件。如果您对实际输出进行了实质性更改,则上述所有可能是无用的建议:我们只能回复您实际上告诉我们的内容。尽管如此,您最好的选择可能是提交这些文件。
你永远不应该害怕做出承诺。如果您不希望在当前分支上完成这些提交,创建一个新分支,然后进行提交(git add
文件和git commit
结果)。新分支上的新提交将与任何先前分支上的所有其他提交分开,您可以随时切换回以前的分支或先前的提交。然后,您可以选择何时将他们的工作与您的工作合并,以及何时(以及是否)专门用于他们的工作或您的工作。
请注意,一旦实际进行了合并,您仍会在添加的文件中添加/添加冲突,这些文件也会添加。如果您只是想使用这些文件的版本,这很容易做到,甚至更多或更少自动。 (如果你想要一个更聪明的合并,使用你的两个工作的公共部分作为合并基础,那就更难了,虽然更新版本的Git似乎正在增强这种能力。)