我将首先解释我的情况:
我在新创建的存储库中有一个文件script
。
然后我做了:
git add script
git commit -m 'initial commit'
git push -u origin master
..但后来我意识到我想要我的script
文件的评论剥离版本,
所以我做了:
- 使用script
sed
删除了评论
git rm script
git add script-no-comments
哪个git被识别为正在重命名的文件,这没关系。
,则:
git commit -am 'comments removed'
git push origin master
所以现在我有本地和远程,两个提交,首先是文件 评论,另一个没有。
我的问题是:我现在如何在本地删除第一次提交,保留我的
最后一个版本没有评论,然后我想我可以做强制推送
远程因此覆盖那里的提交。我并不关心提交sha
变化,因为没有人会pull
而是我?
也会删除该评论 版本是好的,因为我不希望它可以恢复?
答案 0 :(得分:5)
你不能“删除”第一次提交,但你可以将你所做的两次提交压缩成一次提交。
您可以使用git rebase -i HEAD~2
完成此操作,但我个人认为此过程更容易:
将分支指针移回第一个提交:
git reset --hard HEAD~
暂存上一次提交的更改:
git merge --squash HEAD@{1}
提交您的更改,将其修改为一次提交。
git commit --amend
强制将新的单个提交推送到服务器:
git push -f
答案 1 :(得分:1)
你可以做一个互动的rebase
,压缩两个提交:
git rebase -i HEAD~2
按照编辑器中的说明操作,您也可以在其中更改提交消息。
原始提交仍然存在(但无法访问),您可以通过垃圾回收删除它们:
git gc