由于一些糟糕的选择,我的本地Git存储库目前比原始库提前了五次提交,并且状态不佳。我想摆脱所有这些承诺,重新开始。
很明显,删除我的工作目录并重新克隆就可以了,但再次从GitHub下载所有内容似乎太过了,而且没有很好地利用我的时间。
也许git-restore是我需要的,但我不想在源代码之前提交10次(甚至6次),即使它确实将代码本身恢复到正确的状态。我只想假装最后半小时从未发生过。
有一个简单的命令可以做到这一点吗?这似乎是一个明显的用例,但我找不到任何例子。
请注意,这个问题专门针对提交,而不是:
未跟踪的文件未分级更改已分段但未提交的更改
如果你让你的本地repo变得一团糟,那么在Git中丢弃本地提交的一个可靠方法就是。。。
使用“git-config--getremote.login.url”获取远程源的url将本地git文件夹重命名为“my_broken_local_repo”使用“gitclone<url_from_1>”获取远程git存储库的新本地副本
根据我的经验,Eclipse可以很好地处理周围的世界变化。然而,您可能需要在Eclipse中选择受影响的项目并清理它们,以迫使Eclipse重新构建它们。我想其他IDE可能也需要强制重建。
上述过程的一个副作用是,您将发现您的项目是否依赖于未放入git的本地文件。如果您发现缺少文件,那么可以将它们从“my_broken_local_repo”复制到git中。一旦您确信新的本地存储库具备所需的一切,就可以删除“my_broken_local_repo”。
查找要还原到的提交的sha1:
za$ git reflog
... snip ...
cf42fa2... HEAD@{0}: commit: fixed misc bugs
~
~
cf42fa2... HEAD@{84}: commit: fixed params for .....
73b9363... HEAD@{85}: commit: Don't symlink to themes on deployment.
547cc1b... HEAD@{86}: commit: Deploy to effectif.com web server.
1dc3298... HEAD@{87}: commit: Updated the theme.
18c3f51... HEAD@{88}: commit: Verify with Google webmaster tools.
26fbb9c... HEAD@{89}: checkout: moving to effectif
然后使用--mixed标志,以便“重置HEAD和索引”:
za$ git reset --mixed cf42fa2
可用标志:
za$ git reset -h
-q, --quiet be quiet, only report errors
--mixed reset HEAD and index
--soft reset only HEAD
--hard reset HEAD, index and working tree
--merge reset HEAD, index and working tree
--keep reset HEAD but keep local changes
--recurse-submodules[=<reset>]
control recursive updating of submodules
-p, --patch select hunks interactively
-N, --intent-to-add