git重置,同时保留未来的提交

编辑:这个问题不是 “如何恢复到以前的提交”。

假设我的master是这样的:

A B C D

假设我想将提交B推送到origin/master而不重置它并丢失提交CD

这正是我用普通的git reset --hard ,但是就像我说过的,我在B之后失去了任何提交,所以这不是好事:

A B

相反,我希望提交链看起来像这样:

A B C D B

这可能吗? 换句话说,我想让本地文件匹配提交B ,然后提交它们,而不用重置链。 新提交在技术上将是提交E但它的文件将与提交B相同。

由于这将由自动化脚本运行,我不想使用分支,可能会创建一个乌鸦巢。


我想我可能已经找到了解决办法。 在寻找解决方案时,我发现这也可以被认为是“如何犯下一个孤立的头”。 这通常被认为是不好的,git不希望你这样做,因为你会抹杀其他人的任何其他提交。

但是,由于没有人从这个回购协议中进行修改,所以不会有覆盖其他人工作的风险。 唯一的拉是从网络服务器自动。

所以步骤是:

git reset --hard master摆脱任何会影响脚本的未提交的更改。

git checkout B将文件更改为正确的提交。

git reset --soft master这会将HEAD更改为master ,但将文件保存为提交B的文件

git checkout master通过让我们回到树的顶端来解决“分离的HEAD”问题,但是由于前面的命令已经把我们放回了那里,所以没有文件被改变

在这一点上,我们可以像正常一样添加和提交,并且git会将提交补丁实质上从提交master提交给B

我将不得不做一些更多的测试,以确保它按照我的预期工作。

链接地址: http://www.djcxy.com/p/18857.html

上一篇: git reset while keeping future commits

下一篇: GIT how to reset without a commit