Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 添加多个提交后如何取消提交?_Git - Fatal编程技术网

Git 添加多个提交后如何取消提交?

Git 添加多个提交后如何取消提交?,git,Git,我知道如果我犯了什么,我可以像这样取消犯: get reset HEAD~1 这将有效地“回到”一个承诺。我的问题是,我做了一个承诺,然后拉。事实上,我做了很多拉,添加了越来越多的代码。因此,我最终得出以下结论: --> Other User Commit A <<-- WAS PUSHED --> Other User Commit B <<-- WAS PUSHED --> MY COMMIT <<---- This is what

我知道如果我犯了什么,我可以像这样取消犯:

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

-->其他用户提交A您可以恢复提交,而无需触摸通过以下方式推到顶部的其他更改:

git revert <commit>
git还原
这将仅逆转该提交中的更改。一旦推送,就好像从未发生过提交(尽管git历史记录仍然存在)


另一种选择是只删除文件,然后提交删除操作。

由于您从未推送此分支,因此您应该可以很好地重写历史记录并删除错误的提交操作。要做到这一点,您可以在分支上执行交互式重基:

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
。只需从文件中删除该行,保存并关闭即可。这将有效地从您的分支中删除错误提交,您现在应该能够推送到远程。

由于您从未推送过提交,如果您不想更改历史记录,最好的选择可能是拉一个全新的分支。假设您正在处理的分支称为feature,您可以执行以下操作:

git checkout "Other User Commit E' code"
git branch -f feature
git pull origin feature
这将为您获得一份最新的feature branch代码副本,如果您从未推动提交,这应该足够好了。

git branch-f
将把所需的分支带到您当前所在的提交中。

是否有其他人使用您的分支?你可以重新设定它的基础/重写历史吗?我不能重写历史。。。我必须只能删除那个。考虑到它在你的代码库中是一个1.6GB的文件,我认为你必须重写历史才能将它从repo中删除,以免所有拉入你代码的人在获取你的分支时都被迫拉下来。我不认为这是最好的选择,因为错误的提交,包含大量二进制文件,可能仍然会被推到远程。这就是我想要避免的。。。i、 e.提交巨大的二进制文件@Juan给出的答案也可以,但它完全放弃了分支。执行此操作后,我得到:错误:未跟踪的工作树文件“public_html/sites/default/files/advagg_js/js_of su.js”将被merge覆盖。关于此文件,您能告诉我什么?这是错误提交的一部分吗?您使用此解决方案不会有不同的历史记录吗?我的意思是,如果你不强迫它,你就不能拉或推,对吗?@Juan因为文件太大,他根本不能推。因此,我想他可以在删除错误提交后快速推进远程分支。@coderama,这样您就可以“取消添加”文件,因为您只是恢复到当前远程分支状态,而忘记了本地更改在retrospect中,这可能会更容易:/