2

我知道 Git 有大量的文档,并且有大量关于它的帖子(例如,我查看了How to delete a 'git commit'this),但还没有任何效果,我不知道该做什么在这里做。

我有一个到目前为止只有我承诺的回购,但我最近开始在两台不同的笔记本电脑上工作,不知何故我不小心推了一些被 Git 视为合并的废话,然后我也推了最新的更改。

我一直在试图弄清楚如何完全删除最后 2 个提交,将 repo 倒回到那个决定性的一天之前的状态(因为我现在有一堆新的提交,我需要进入那个 repo)。如果您愿意给我任何指示,请注意 repo 托管在 github

4

4 回答 4

2

对于新手来说,最简单的方法git reset --hard HEAD^是使用 gitk --all。

这样你就可以看到你所有的历史。当前分支以粗体显示。您可以右键单击之前的提交,然后选择“在此处重置当前分支”。系统将提示您执行何种重置。选择“硬”,你应该回到你想去的地方。

于 2012-07-30T02:57:39.270 回答
1

为了删除最近的提交,只需使用git reset --hard HEAD^. 如果最近的提交是合并,这将恢复到第一个父级(即merge/pull运行之前的状态)。

如果您可以确定您希望成为分支尖端的确切提交,则可以使用有问题的提交在git reset --hard $SHA哪里。$SHA

于 2012-07-29T21:26:10.197 回答
0

感谢Shahbaz发布的问题的答案,我最初尝试过

git push -f origin HEAD^^:master

这似乎完美地删除了最后两个提交。但是,只要我对本地文件进行了一些更改并进行了推送,旧的提交就会重新出现!:(

再次尝试后,这一次HEAD^^^(因为我现在需要删除最后 3 个提交),我查看git log并发现所有内容都在本地。不知道如何解决这个问题,我只是清除了本地目录,重新克隆了 repo,然后手动复制到我新修改的文​​件中。最后,添加和推送并没有带回旧的不需要的提交。

显然,我确信有更好的方法,但我无法通过遵循你们可爱的人们的建议来实现它。(示例:我尝试过,git rebase -i HEAD~4但我不明白我在编辑器中得到的输出——它给了太多行 (9),我不知道该怎么做。)

我将把它留给更有经验的人来决定是否应该将这个问题作为副本删除。

于 2012-07-30T04:59:07.373 回答
0

这对我有用(按记忆):

git reset --hard HEAD^^
git push --force HEAD:master
git pull
于 2012-07-29T22:00:48.657 回答