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 commit
或 git commit --amend
。
第一个将在 [target commit]
之上创建一个新提交,第二个将重写 [target commit]
。
我有一个包含单个分支和大量提交的回购协议。
我想将所有提交压缩为一个。
我愿意:
git rebase --root -i
(参见:How to squash all git commits into one?)
将所有提交设置为 squash(第一个提交除外,设置为“pick”)并退出编辑器后,交互式 rebase 停止并要求我解决一些冲突。
我对此很困惑。我理解将一个分支合并到另一个时会发生冲突。压缩时我不明白:不应该将较新的提交自动视为文件的“正确”版本吗?另外,在整个提交过程中修改了几个文件,为什么只有极少数文件显示冲突?
正如@mnestorov 的评论所暗示的那样:您可能在历史记录中合并了分支。
如果您打算扔掉一大块历史记录并简单地将提交压缩在一起,您可以在不使用 git rebase
.
只需 运行 git reset --soft [target commit]
,然后是 git commit
或 git commit --amend
。
第一个将在 [target commit]
之上创建一个新提交,第二个将重写 [target commit]
。