案例: A分行 提交1 -> 提交2 -> 提交3 -> 提交4
头部当前处于 Commit4 状态。
我想重置回(不难)到 Commit1 并使用 Commit1 作为基础来仅实现 Commit4 中所做的任何更改。
所以最终的结果是: 提交1 -> 提交4
有没有 git 命令可以做到这一点?或者我应该回滚到 Commit1 并手动实现 Commit4 中完成的更改?
谢谢!
最佳答案
根据您的问题,我很清楚您希望提交序列读取:
... <- C1 <- new-C4 <-- branch
(请记住,箭头始终指向过去的历史,而不是指向 future )。
我不清楚您是否希望您的新提交(我在上面称为 new-C4
)保持源代码在 旧的 C4
,或者您是否要放弃在 C2
和 C3
中所做的所有更改,而仅保留更改 用 C4
制作。
您可以使用 git rebase 来实现后一个结果,但请记住通常的警告,即您永远不应该对已发布的提交进行 rebase。要实现这一点,只需运行:
git rebase -i HEAD~4
这将打开一个编辑器 session ,您可以在其中保留或放弃特定的提交。请参阅answer linked在 Martin Konecny's comment ,或Barry Gackle's answer .
如果您想保留由C2
和C3
引入的更改,同时放弃提交本身,那么git reset --soft
后跟 git commit
是正确的方法。请参阅VonC's answer here .
关于Git 重置(不难)然后快进 merge 某些提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30181381/