Git pull -X他们的工作不起作用

时间:2016-11-14 09:56:57

标签: git

拉动时出现以下错误:

  

错误:将覆盖以下未跟踪的工作树文件   合并:   [文件列表]。   请在合并之前移动或删除它们。

     

您对以下文件的本地更改将被覆盖   合并:[文件列表]。请提交您的更改或将其存储在您之前   可以合并。

我想接受所有列出文件的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。

1 个答案:

答案 0 :(得分:1)

您的(a),(b)和(c)方法都做同样的事情。请注意,git pull仅为git fetch,后跟git merge。此外,-X--strategy-option只是同一选项的替代拼写。您的方法(d)只连续运行两个git fetch命令,后跟一个git merge

您展示的两个投诉都是关于名为files的文件。但是,它们是不同的投诉,这意味着您已经对实际的错误消息做了些什么。无论如何,我会解决这两个案例:

  1. 未跟踪文件通常是不可合并的。通常,文件必须在所有三个提交中:合并基础提交和两个分支提示提交。 (在某些情况下,可以合并一个故意删除的文件,尽管其中许多情况会导致删除/修改冲突,Git无法自行解决。我怀疑你有这些情况之一。)

  2. 未提交的更改(对于跟踪的文件)很难(并且不建议)进行合并。

  3. 对于案例1:不清楚为什么名为files的文件在提示提交中未被跟踪,但 存在于提示提交中。您可以git add此文件并git commit结果,但如果该文件不在合并库中,您将获得"添加/添加冲突"在此文件上,仍然需要手动解决它。

    无法判断(根据您提供的信息)此文件是否在合并库中,但可能不是。最可能的方式是它在合并库中,从当前提交中丢失,并出现在他们最常见的提交中,如果你已经明确删除它(使用git rm)并提交了这个结果,并且如果你这样做了,你现在就不会问这个了。

    您最好的选择可能是将名为files的文件移开。然后,您可以运行两个git fetchgit merge命令(可能通过运行一个git pull命令 - 我通常建议将其分解为两个独立的组件,因为当事情发生时出错了,您需要采取不同的操作来解决问题,具体取决于哪一个失败,但对于" fetch&#34来说很少见;步骤失败)。合并完成后,您可以决定是选择他们的files文件,还是原始files文件,或两者的混合,并通过以下方式构建所需的最终files文件手。

    对于案例2:您修改了名为files的文件,该文件存在于提示提交中,并且也存在于提示提交中。您尚未完成git add filesgit commit强烈建议在尝试合并之前提交此更改。在提交文件之前,您不能使用git merge将提示提交与提示提交合并。 (无论如何 可以尝试合并,但不能与git merge一起尝试,而不是自Git 1.5.0.2版以来。但不要这样做。)

      

    我想接受所有列出文件的更改。但是,我不想删除任何其他文件!我也不想承诺。有很多文件,我不想单独处理它们。

    您只显示了一个名为files的文件。如果您对实际输出进行了实质性更改,则上述所有可能是无用的建议:我们只能回复您实际上告诉我们的内容。尽管如此,您最好的选择可能是提交这些文件。

    你永远不应该害怕做出承诺。如果您不希望在当前分支上完成这些提交,创建一个新分支,然后进行提交(git add文件和git commit结果)。新分支上的新提交将与任何先前分支上的所有其他提交分开,您可以随时切换回以前的分支或先前的提交。然后,您可以选择何时将他们的工作与您的工作合并,以及何时(以及是否)专门用于他们的工作或您的工作。

    请注意,一旦实际进行了合并,您仍会在添加的文件中添加/添加冲突,这些文件也会添加。如果您只是想使用这些文件的版本,这很容易做到,甚至更多或更少自动。 (如果你想要一个更聪明的合并,使用你的两个工作的公共部分作为合并基础,那就更难了,虽然更新版本的Git似乎正在增强这种能力。)