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

时间:2016-02-14 07:00:46

标签: git

编辑:此问题“如何恢复到之前的提交”。

假设我的master看起来像这样:

A B C D

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

这是我使用普通git reset --hard得到的,但就像我说我在B之后失去了任何提交,所以这没有用:

A B

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

A B C D B

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

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

1 个答案:

答案 0 :(得分:0)

我可能已经找到了解决方案。在寻找解决方案时,我发现这也可以被认为是"如何提交一个分离的头部"。这通常被认为是不好的,git并不希望你这样做,因为你会删除其他人的任何其他提交。

然而,由于没有人从这个回购中撤出并进行更改,因此不会有任何覆盖其他任何人工作的风险。唯一的提取是自动从Web服务器。

所以步骤是:

git reset --hard master 摆脱任何会导致脚本崩溃的未提交的更改。

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

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

git checkout master 这解决了"分离的HEAD"让我们回到树的尖端问题,但由于上一个命令已经让我们回到那里,没有文件被更改

此时我们可以像普通一样添加和提交,git将提交补丁本质上从提交masterB

我必须做更多的测试,以确保它能按照我的预期运作。