由于一些错误的挑选,我的本地Git存储库目前比源站提前五次提交,并且状态不好。我想摆脱所有这些承诺,重新开始。
显然,删除我的工作目录并重新克隆可以做到这一点,但是再次从Github下载所有内容似乎太浪费时间了,而且没有很好地利用我的时间。
也许我需要的是git revert,但我不想在源代码之前(甚至是6个)完成10个提交,即使它确实使代码恢复到正确的状态。我只想假装过去半小时从未发生过。
是否有一个简单的命令可以做到这一点?这似乎是一个明显的用例,但我没有找到任何例子。
请注意,这个问题是关于提交的,而不是关于:
如果你的超额承诺只对你可见,你可以这样做git reset --hard origin/移回原点所在的位置。这将把存储库的状态重置为上一次提交,并放弃所有本地更改。
做一个git revert会使新的承诺以一种保持每个人历史健全的方式消除旧的承诺。
- 哇,棒极了,一个Git重置——硬原点/主控,这正是我想要的。我不想向大师承诺任何事情,而这正是我想要的。谢谢。
- 如果要转到远程分支以外的特定引用,则返回git reset --hard 。
- 只是说清楚,如果你不是在master上工作,而是在另一个分支上工作,你应该运行git reset --hard origin/。
- 这不仅会丢弃本地提交,还会丢弃工作树中的所有内容(即本地文件)。如果你想做的只是取消注释,但要保持你的工作完整,你应该做"git reset head^"…每个stackoverflow.com/questions/2845731/…
- git reset--soft origin/如果不想释放更改。就好像…很难
- 因为你错误地认为我的远程分支叫"master",所以投了反对票。
- 这也带走了我在当地未提交的更改:(
- 如果有本地标签,这将无法摆脱那些。当Maven发布由于标签重复而失败时,我注意到了这一点。
- 在这之后,您可能需要进行一次提取。这修复了sourcetree上等待推送计数器的提交数。
- 这不起作用,必须删除本地Git存储库并再次克隆。
- git reset --hard origin/它也将重置项目配置,因此要注意这一点。我有一个大的.cfg文件,它被重置为默认值。我又花了好几个小时在这上面。
只需删除您的本地主分支并像这样重新创建它:
1 2
| git branch -D master
git checkout origin/master -b master |
- 当回溯您的更改会花费太多的时间时,这很好地工作,这发生在我经过几次重新平衡之后。
- 对于团队成员之间的子树拉/推问题很有用!
- 当您希望恢复分支而不仅仅是主分支时,这是完美的。
- 当您的远程分支很大时,这个解决方案是一个问题!!!!!
- 在Eclipse中使用eGit,此解决方案工作完美且简单!
- 这不是删除单个本地提交的好方法。最好使用git reset --hard origin/。
- @如果您的解决方案很大,那么您面临的问题比删除和签出分支更大:)
- 也许这个解决方案可行,但这并不意味着它是正确的。
尝试:
1
| git reset --hard <the sha1 hash> |
把你的头重置到你想去的地方。使用Gitk查看您要进行的提交。你也可以在Gitk中进行重置。
- 这个b/c被否决了,它是有用的信息,但是本·杰克逊的答案得到了正确解决我想要的问题的复选标记——这种方式不需要我查找提交哈希。:)
- 这是你的新分支还没有被推到原点的时候
删除最新提交:
git reset --hard HEAD~1
删除最近的提交,而不破坏您所做的工作:
git reset --soft HEAD~1
- 有用的答案。谢谢您!我使用了Git重置——软原点/主节点
- @塔伦古玛,谢谢你!我使用的是vs集成,而您的解决方案是我能够清除大量合并提交的唯一方法,这些提交在我没有权限签入的分支中是我不想要的。
如果您使用的是Atlassian SourceTree应用程序,则可以使用上下文菜单中的重置选项。
尝试分支时:
1
| git reset --hard origin/<branch_name> |
使用"EDOCX1"〔2〕或"EDOCX1"〔3〕验证撤销(对国家,无本地承诺)。
- 你的回答对这个质量保证没有什么新的补充。
- @特洛伊:上面列出的所有答案,我都试过了,但没有得到解决方案。一般方法,没有在上面的任何答案中说明,是这里试图回答的问题。
- 接受的答案与您的答案相同,减去通用分支名称,并且在注释@zoltan中明确表示Just to be clear, if you're not working on master but on another branch, you should run git reset --hard origin/
git reset --hard @{u}删除当前分支上的所有本地更改,包括提交。我很惊讶还没有人发布这个消息,因为您不必查找要恢复或使用分支的承诺。
*也就是说,重置到@{upstream}处的当前分支-通常为origin/,but not always
- 一些贝壳如fish会解释"@",因此您可能需要在引号中加上"@u",例如"git reset--hard"@u"。总之,很好的发现!
要查看/获取提交的sha-1 ID,您也要返回
回到那个承诺
1
| git reset --hard sha1_id |
!注意事项。在提交之后所做的所有提交都将被删除(以及您对项目的所有修改)。因此,首先最好将项目克隆到另一个分支或复制到另一个目录。
- 这对于远程不再可用的情况非常好,只需重置为某些本地提交即可。吉特太棒了-事先没有意识到。
- 如果你已经在Gitk了,你也可以简单地右击提交,然后选择"重置分支xy到这里"。
- 更新的提交不会立即被删除。再也没有指向它们的分支了(记住,分支只是特定提交的"书签")。
对于未被推送的本地提交,也可以使用git rebase -i删除或挤压提交。
- 我知道这可能不是最短的解决方案,但我反对你,因为imho git rebase -i是解决许多类似问题的更通用的方法,在各种情况下都有帮助。
- 删除所有提交时使用drop关键字(而不是删除一行),以避免中止重新平衡。
我曾遇到过这样一种情况,我想删除一个未被强制执行的提交,但提交是在另一个提交之前。为此,我使用了以下命令
git rebase -i HEAD~2->将重新调整最后两次承诺
我使用了"drop"来删除提交签名。
删除未跟踪的文件(未提交的本地更改)
永久删除所有本地提交并获取最新的远程提交
1
| git reset --hard origin/<branch_name> |
1
| git reset --hard <SHA-Code> |
如果您在本地副本上犯了一些错误,希望确保不会被错误地推到远程分支,那么这将非常有用。
可以通过查看Git仪表板的WebVersion来获取sha代码,以便在分支上进行最后一次提交。
这样就可以与分支上的最后一次提交同步。
您可以在成功完成硬重置后执行git pull,以确认syn没有任何新内容,即您可以看到消息。
你的分支机构与Origin/是最新的