首页 > 解决方案 > git rebase,压缩所有提交:如何发生冲突?

问题描述

我有一个带有单个分支和大量提交的仓库。

我想将所有提交压缩为一个。

我愿意:

git rebase --root -i

(请参阅:如何将所有 git 提交压缩为一个?

在将所有提交设置为 squash(除了第一个,设置为“pick”)并退出编辑器后,交互式 rebase 停止并要求我解决一些冲突。

我对此感到很困惑。我理解将一个分支合并到另一个分支时的冲突。挤压时我不明白:不应该将较新的提交自动视为文件的“正确”版本吗?此外,在整个提交过程中修改了几个文件,为什么只有极少数文件显示冲突?

标签: gitrebasegit-merge-conflictsquash

解决方案


正如@mnestorov 的评论所暗示的那样:您可能在历史记录中合并了分支。


如果您的意图是丢弃大量历史记录并简单地将提交压缩在一起,则可以不使用git rebase.

只需运行git reset --soft [target commit],然后是git commitor git commit --amend

第一个将在 之上创建一个新提交[target commit],第二个将[target commit]就地重写。


推荐阅读