我知道如果我做出某些事情,我可以这样解除承认:
get reset HEAD~1
这将有效地“回归”一次提交。我的问题是我做了一个提交,然后是拉。事实上,我做了很多工作,添加了越来越多的代码。所以我最终得到了:
--> Other User Commit A <<-- WAS PUSHED
--> Other User Commit B <<-- WAS PUSHED
--> MY COMMIT <<---- This is what must be UNDONE, that was never pushed
--> Other User Commit E <<-- WAS PUSHED
--> Other User Commit F <<-- WAS PUSHED
因此重置HEAD~1将简单地摆脱“其他用户提交A”。但是我只需要删除“MY COMMIT”,这是从未被推过的。
关于如何摆脱我的这个提议的任何想法?
(仅供参考,发生的事情是我意外地提交了一个1.6 Gb的文件,并且无法弄清楚为什么push不起作用,但是继续工作并提取新的代码,因为它进来了......但是直到我刚才意识到这个大文件不在提交中......)
非常感谢任何帮助?
更新
最好的解决方案是允许我“取消添加”我添加的文件。
答案 0 :(得分:5)
由于你从未推动过这个分支,你应该很好地重写历史记录并删除错误的提交。为此,您可以在分支上执行交互式rebase:
git rebase -i HEAD~5
这将显示一个屏幕,显示分支历史记录中的最后5次提交。看起来应该是这样的:
pick dl3n2l2 Other User Commit A
pick be7mme2 Other User Commit B
pick loc83ns MY COMMIT
pick af8uo31 Other User Commit E
pick dl983md Other User Commit F
现在删除包含标记为MY COMMIT
的提交的行。只需从文件中删除该行,保存并关闭即可。这应该可以有效地从您的分支中删除错误的提交,现在您应该能够推送到远程。
答案 1 :(得分:2)
由于你从未推动过你的提交,如果你不想改变历史,最好的选择可能就是推出一个全新的分支。让我们假设您正在处理的分支称为功能,您可以这样做:
git checkout "Other User Commit E' code"
git branch -f feature
git pull origin feature
这将为您提供最新功能分支代码的全新副本,如果您从未推送过您的提交,这应该足够好了。
git branch -f
会将所需的分支带到您当前所在的任何提交中。
答案 2 :(得分:1)
您可以在不触及顶部推送的其他更改的情况下还原提交:
git revert <commit>
这将反转一次提交中的更改。一旦推送,就会发生这样的提交(尽管git历史仍然存在。)
另一种选择是删除文件,然后提交删除。