对已远程添加的本地未跟踪文件执行git-merge
或操作时,出现以下错误git-pull
error: The following untracked working tree files would be overwritten by merge:
对此提出了很多问题,但我发现的所有问题都想覆盖本地文件。但是,我想获得一个差异,即合并文件以确保不会丢失任何内容。
我怎样才能自动实现这一点,而无需一一处理文件?
对已远程添加的本地未跟踪文件执行git-merge
或操作时,出现以下错误git-pull
error: The following untracked working tree files would be overwritten by merge:
对此提出了很多问题,但我发现的所有问题都想覆盖本地文件。但是,我想获得一个差异,即合并文件以确保不会丢失任何内容。
我怎样才能自动实现这一点,而无需一一处理文件?
在 Git 中,合并需要三个(而不仅仅是两个)文件:
如果您的工作树中有一个未跟踪的文件,并且他们的提交中有一个同名的文件,那就是您的文件和他们的文件。基础文件在哪里?
该git merge
命令不会组成一个,但您可以执行以下操作:
foo
为foo.ours
);git merge
运行并产生一个新的合并提交(如果需要解决冲突);然后您现在有三个文件:
foo.base
: 你自己想出来的。foo
: 这是他们的文件版本。foo.ours
: 这是你开始之前git merge
拥有的,现在已经完成了。你现在可以:
foo
到foo.theirs
;foo.ours
到foo
;git merge-file foo foo.base foo.theirs
这git merge-file
使用与 相同的算法git merge
,但直接获取三个文件。该ours
版本是您首先命名的版本:foo
here。合并结果会写回这个文件,所以最好使用一个副本,以防 Git 把它弄得一团糟,而你决定重新开始。
请注意,如果您愿意,可以使用空文件作为合并基础。但是,如果您这样做,结果通常不是很有帮助。如果您决定这样做,您可以在合并之前git merge
简单地添加并提交您的文件:将看到两个副本foo
都已添加,即 an add/add conflict
,并做所有这些大惊小怪的事情git merge-file
都会做的事情。
我看到你有两个选择:
git merge
git merge
会将新文件放置到位。git diff
现在将向您展示您的版本与您刚刚合并的版本之间的差异。