如何在添加多次提交后取消提交提交?

cod*_*ama 2 git

我知道如果我做了什么,我可以这样解除它:

get reset HEAD~1
Run Code Online (Sandbox Code Playgroud)

这将有效地"回归"一次提交.我的问题是我做了一个提交,然后是拉.事实上,我做了很多工作,添加了越来越多的代码.所以我最终得到了:

--> 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
Run Code Online (Sandbox Code Playgroud)

因此重置HEAD~1将简单地摆脱"其他用户提交A".但我只需要删除"MY COMMIT",这是从未被推过的.

关于如何摆脱我的这个提议的任何想法?

(仅供参考,发生的事情是我意外地提交了一个1.6 Gb的文件,并且无法弄清楚为什么push不起作用,但是继续工作并提取新的代码......但是从来没有推过这个直到我刚刚意识到既然这个大文件不在提交......)

任何帮助将不胜感激?

UPDATE

最好的解决方案是允许我"取消添加"我添加的文件.

Tim*_*sen 5

既然你从未推动过这个分支,那么你应该很好地重写历史并删除错误的提交.为此,您可以在分支上执行交互式rebase:

git rebase -i HEAD~5
Run Code Online (Sandbox Code Playgroud)

这将显示一个屏幕,显示您分支历史记录中的最后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
Run Code Online (Sandbox Code Playgroud)

现在删除包含您标记的提交的行MY COMMIT.只需从文件中删除该行,保存并关闭即可.这应该有效地从您的分支中删除错误的提交,您现在应该能够推送到远程.