Git 重置(不难)然后快进 merge 某些提交

标签 git git-merge git-reset

案例: A分行 提交1 -> 提交2 -> 提交3 -> 提交4

头部当前处于 Commit4 状态。

我想重置回(不难)到 Commit1 并使用 Commit1 作为基础来仅实现 Commit4 中所做的任何更改。

所以最终的结果是: 提交1 -> 提交4

有没有 git 命令可以做到这一点?或者我应该回滚到 Commit1 并手动实现 Commit4 中完成的更改?

谢谢!

最佳答案

根据您的问题,我清楚您希望提交序列读取:

... <- C1 <- new-C4   <-- branch

(请记住,箭头始终指向过去的历史,而不是指向 future )。

我不清楚您是否希望您的新提交(我在上面称为 new-C4)保持源代码在 旧的 C4,或者您是否要放弃在 C2C3 中所做的所有更改,而仅保留更改C4 制作。

您可以使用 git rebase 来实现后一个结果,但请记住通常的警告,即您永远不应该对已发布的提交进行 rebase。要实现这一点,只需运行:

git rebase -i HEAD~4

这将打开一个编辑器 session ,您可以在其中保留或放弃特定的提交。请参阅answer linkedMartin Konecny's comment ,或Barry Gackle's answer .

如果您想保留C2C3引入的更改,同时放弃提交本身,那么git reset --soft 后跟 git commit 是正确的方法。请参阅VonC's answer here .

关于Git 重置(不难)然后快进 merge 某些提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30181381/

相关文章:

git - 从大型 git repo 中查找特定的几行代码

Squash merge 后的 Git 冲突

Git:如何将 "undo" merge

Git:主重置后分支会发生什么

git - git-reset 的 --merge 和 --keep 标志的典型用例是什么?

linux - 查找与某个 'count of commits' 匹配的所有 git 提交

python - Windows 上的 Git clean-filter python 脚本

git更新 Hook : Finding all revs being committed

git - 有没有办法防止两个分支在git中 merge

分支 A 和 B 之间的 Git diff,选择一组文件模式更改,将这些更改重置到分支 A