当你执行rebase操作时,如果Git无法解决当前分支和新基础分支之间的差异,它会要求手动干预。
如果你解决了冲突并键入git rebase --continue
,Git会将解决后的代码视为该提交的“新代码”。
但是当你使用git rebase --skip
命令时会发生什么?由于存在冲突,它不能保留代码原样,所以它必须执行更多的操作而不只是“跳过”。
当你执行rebase操作时,如果Git无法解决当前分支和新基础分支之间的差异,它会要求手动干预。
如果你解决了冲突并键入git rebase --continue
,Git会将解决后的代码视为该提交的“新代码”。
但是当你使用git rebase --skip
命令时会发生什么?由于存在冲突,它不能保留代码原样,所以它必须执行更多的操作而不只是“跳过”。
如果发生冲突,git rebase --skip
命令将直接跳过整个提交记录。在成功完成变基后,该提交所做的更改将不会出现在历史记录中。让我们看一个例子。
A-B-C <- master
\
D-E <- foo
现在假设D引起了一个冲突。
git checkout foo
git rebase master
然后运行git rebase --skip
会得到以下结果:
A-B-C <- master
\
E' <- foo
其中E'包含与E相同的文本更改。
git rebase --skip
更像是git rebase --delete-commit-and-continue
。 - achalkD
没有 被删除。它仍然存在于存储库中,但已经被孤立,因为它不在任何分支的历史记录中。同样,原始提交 E 也存在。如果您理解每个提交不仅包含我之前描述的代码更改,而且还包含对其父级的引用,则会更有帮助。两个包含相同文本更改但具有不同父级的提交是不同的提交。这就是为什么我在 rebase 后使用名称 E' 的原因。这是一个新的提交,它包含与 E 相同的更改,但具有不同的父级。 - Code-Apprenticegit rebase
会在分支“foo”上复制每个提交,我们告诉它只需跳过复制D。 - Code-Apprentice