我曾在本地分支工作过,添加了许多提交。
然后我把它推到了remote staging
分支。
现在我必须撤消已经推送到的最后一次提交remote staging
这是我的本地分支的合并remote staging
查看其他答案时我了解到的是,我必须使用恢复而不是重置才能以干净的方式进行操作,不是吗?
所以我要做的是:
- 创建一个新的本地分支,例如
cleaning
having master
作为家长(即在舞台后面)
- 拉动遥控器
staging
进入清洁
- use
git revert {last good commit hash in staging}
- now
cleaning
应该处于良好的承诺状态并且处于相同的状态remote staging
在我的糟糕推动之前,不是吗?
- 现在我应该推
cleaning
into remote staging
恢复远程分支。带有哪些旗帜?
我对么?因为git status
处于第 4 点告诉我我已经了解最新情况staging
别把事情搞复杂了。
首先你需要做一个git log
找出您想要恢复的提交 ID。例如它是提交abc123
。如果您知道这是最后一个,则可以使用特殊标识符“HEAD”。
然后,您首先在本地“staging”分支中将其恢复到本地:
git checkout staging
git revert abc123
注意:对于日志中的最后一次提交,您将写入git revert HEAD
.
然后你更新你的远程“暂存”:
git push
说明:在 git 中,如果您有一个远程仓库,那么您正在处理 2 个不同的存储库(本地和远程)。做完之后git checkout staging
,您实际上创建了一个代表远程分支的不同本地名称。git revert
实际上不会删除您的提交,但它会在顶部创建一个新的提交,从而撤消所有更改(如果您添加了一个文件 - 新的提交将删除它,如果您删除了一行 - 新的提交会将其添加回来等等.),即它是日志的补充,这就是推送是干净的的原因。
如果你真的想让它消失,这样就没有人可以责怪你,你可以这样做,风险自负:
git checkout staging
git reset --hard HEAD^
git push -f
(重置行重新定位本地“暂存”分支,以便它指向顶部提交之前的提交)
一般来说,强制推送是一种不好的做法,但保留无用的提交和恢复也不好,因此另一种解决方案是实际创建一个新分支“staging2”并在该分支中进行测试:
git checkout staging
git checkout -b staging2
git reset --hard HEAD^
git push
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)