我想从远程存储库中删除一些提交。我的回购中很少有这样的提交:
commits messages
abcd123 some message
xyze456 another commit message
98y65r4 this commit is not required
987xcrt this commit is not required
bl8976t initial commit
我想从我的仓库中删除提交98y65r4
和987xcrt
。如何实现呢?
答案 0 :(得分:9)
有两个替代方案:安全的一个让你有一个肮脏的git历史,或者不安全的一个让你有一个干净的git历史。你选择:
你可以告诉git"还原提交"。这意味着它将引入一个更改,以恢复您在提交中所做的每个更改。您需要执行两次(每次提交一次):
scp -r username@hostname:sourcedirectory username@hostname:destinationdirectory
此解决方案将保留您的git历史记录(您可以执行git revert 98y65r4
git revert 987xcrt
查看回购状态的图形表示):
gitk --all
然后你可以将新的2次提交推送到你的远程仓库:
2222222 revert of 987xcrt: this commit is not required
1111111 revert of 98y65r4: this commit is not required
abcd123 some message
xyze456 another commit message
98y65r4 this commit is not required
987xcrt this commit is not required
bl8976t initial commit
此解决方案是安全的,因为它不会对远程仓库进行破坏性操作。
您也可以使用交互式rebase。命令是:
git push
在其中,您告诉git让您选择要混合的提交,重新排序或删除。
执行命令时,编辑器将打开一个类似于此的文本:
git rebase -i bl8976t
继续删除你不想要的行,如下所示:
pick bl8976t initial commit
pick 987xcrt this commit is not required
pick 98y65r4 this commit is not required
pick xyze456 another commit message
pick abcd123 some message
保存文件并关闭编辑器。
到目前为止,这只修改了您的存储库的本地副本(您可以使用pick bl8976t initial commit
pick xyze456 another commit message
pick abcd123 some message
查看提交树。)
现在您需要将更改推送到您的仓库,这是通过"推力"完成的,但在执行命令之前请记住推力是一种破坏性操作,它将覆盖远程存储库的历史记录,并可能导致其他人员的合并问题。如果你没事,想要做推力,命令是:
gitk --all