0

对已远程添加的本地未跟踪文件执行git-merge或操作时,出现以下错误git-pull

error: The following untracked working tree files would be overwritten by merge:

对此提出了很多问题,但我发现的所有问题都想覆盖本地文件。但是,我想获得一个差异,即合并文件以确保不会丢失任何内容。

我怎样才能自动实现这一点,而无需一一处理文件?

4

2 回答 2

2

在 Git 中,合并需要三个(而不仅仅是两个)文件:

  • 有一个“基本文件”:这是你和他们,无论他们是谁,开始的。
  • 有你的文件:无论基础文件和你的文件有什么不同,这些都是你的更改
  • 有他们的文件:无论基础文件和他们的文件有什么不同,这些都是他们的变化

如果您的工作树中有一个未跟踪的文件,并且他们的提交中有一个同名的文件,那就是您的文件和他们的文件。基础文件在哪里?

git merge命令不会组成一个,但您可以执行以下操作:

  1. 将您的文件版本保存在某处(可能在工作树之外,或将您的文件从 重命名foofoo.ours);
  2. git merge运行并产生一个新的合并提交(如果需要解决冲突);然后
  3. 提出您和他们的文件的基本版本。

您现在有三个文件:

  • foo.base: 你自己想出来的。
  • foo: 这是他们的文件版本。
  • foo.ours: 这是你开始之前git merge拥有的,现在已经完成了。

你现在可以:

  1. 复制foofoo.theirs
  2. 复制foo.oursfoo
  3. git merge-file foo foo.base foo.theirs

git merge-file使用与 相同的算法git merge,但直接获取三个文件。该ours版本是您首先命名的版本:foohere。合并结果会写回这个文件,所以最好使用一个副本,以防 Git 把它弄得一团糟,而你决定重新开始。

请注意,如果您愿意,可以使用空文件作为合并基础。但是,如果您这样做,结果通常不是很有帮助。如果您决定这样做,您可以在合并之前git merge简单地添加并提交您的文件:将看到两个副本foo都已添加,即 an add/add conflict,并做所有这些大惊小怪的事情git merge-file都会做的事情。

于 2021-11-23T12:34:24.287 回答
0

我看到你有两个选择:

提交未跟踪的文件

  • 提交未跟踪的文件
  • git merge
  • 处理冲突(如果有)

将未跟踪的文件移到一边

  • 将未跟踪的文件移到一边(重命名它们或将它们移动到其他地方)
  • git merge会将新文件放置到位。
  • 将您移到一边的文件移回其原始位置。
  • git diff现在将向您展示您的版本与您刚刚合并的版本之间的差异。
于 2021-11-23T12:29:48.700 回答