繁体   English   中英

git - 放弃先前的提交,强制推送到远程

[英]git - discard previous commit, force push to remote

我先解释一下我的情况:

我在新创建的存储库中有一个文件script

然后我做了:

git add script
git commit -m 'initial commit'

git push -u origin master

..但后来我意识到我想要我的script文件的评论剥离版本,所以我做了:

- 使用sed从我的script删除了注释

git rm script
git add script-no-comments

哪个git识别为重命名的文件,这没关系。

,然后:

git commit -am 'comments removed'

git push origin master

所以现在我有本地和远程,两个提交,第一个是带注释的文件,另一个没有。

我的问题是:我现在如何在本地删除第一个提交,保留我的上一个版本没有注释,然后我想我可以强制推送到远程,从而覆盖那里的提交。 我不关心在提交sha变化,没有人会pull而我呢?

也会删除该评论版本,因为我不希望它可以恢复?

你无法“删除”第一次提交,但你可以将你所做的两次提交压缩成一次提交。

你可以使用git rebase -i HEAD~2来完成这个,但我个人觉得这个过程更容易:

将分支指针移回第一个提交:

git reset --hard HEAD~

暂存上一次提交的更改:

git merge --squash HEAD@{1}

提交您的更改,将它们修改为单个提交。

git commit --amend

强制将新的单个提交推送到服务器:

git push -f

你可以做一个交互式的rebase ,压缩两个提交:

git rebase -i HEAD~2

按照编辑器中的说明操作,您也可以在其中更改提交消息。

原始提交仍然存在(但无法访问),您可以通过垃圾回收删除它们:

git gc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM