git合并:覆盖未跟踪的文件

4
我有一个包含一些未跟踪文件的分支。我想将另一个分支合并到它上面。 第二个分支包含一个已跟踪文件,但对于第一个分支来说是未跟踪的。会出现以下错误: 错误:合并时下列未跟踪的工作树文件将被覆盖:... 是否有可能覆盖这些未跟踪的文件,并用第二个分支中的文件替换它们,而不知道它们是哪些文件? 我也尝试了-X theirs,在这种情况下似乎不起作用。

1
这方面没有内置的功能,但由于Git是可编写脚本的,您可以编写自己的脚本:只需读取未跟踪文件集(git ls-files --others)和您打算合并的提交中的文件集(git ls-tree -r <commit>)。两个集合的交集命名了Git需要覆盖的文件。移动或删除这些文件,准备工作就完成了。 - torek
1个回答

2

对未跟踪的文件进行储藏:

git stash -u

然后您就可以合并分支了。
根据文档

如果使用了--include-untracked选项,则所有未跟踪的文件也会被存储并通过git clean清除,使工作目录处于非常干净的状态。如果改为使用--all选项,则忽略的文件也将被存储并清理。


2
这不是一个选项。目录中有许多未暂存的文件,不应该被删除。 - ibot3
@ibot3 不会的。你只需要合并那个分支并弹出存储。冲突的文件将引发冲突,然后您可以解决它们。 - cst1992
我需要一种自动化的方式,无需手动解决冲突。 - ibot3
我建议更频繁地提交。 - evolutionxbox
@PatrickParker 除非你使用 --all,但我从来没有必须这样做过。 - cst1992
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接