git 变基,压缩所有提交:怎么会发生冲突?

git rebase, squashing all commits: how can conflicts occur?

我有一个包含单个分支和大量提交的回购协议。

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

我愿意:

git rebase --root -i

(参见:How to squash all git commits into one?

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

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

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


如果您打算扔掉一大块历史记录并简单地将提交压缩在一起,您可以在不使用 git rebase.

的情况下这样做

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

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