git重置,同时保留未来的提交
编辑:这个问题不是 “如何恢复到以前的提交”。
假设我的master
是这样的:
A B C D
假设我想将提交B
推送到origin/master
而不重置它并丢失提交C
和D
这正是我用普通的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