git恢复到某个提交

Dav*_*vid 162 git commit revert

如何将本地副本上的所有文件还原为某个提交?

commit 4a155e5b3b4548f5f8139b5210b9bb477fa549de
Author: John Doe <Doe.John.10@gmail.com>
Date:   Thu Jul 21 20:51:38 2011 -0500
Run Code Online (Sandbox Code Playgroud)

这是我想恢复的提交.任何帮助都将成为救星!

And*_*ndy 253

git reset --hard 4a155e5 将HEAD移回您想要的位置.如果您不希望任何内容指向您刚删除的历史记录,那么在此之前可能还有其他引用需要删除.

  • Stack Overflow上另一个错误的接受答案......您无法提交这些更改.请参阅[返回存储库中的特定修订后提交并推送更改?](http://stackoverflow.com/q/38229852) (11认同)
  • 在本地执行“git reset --hard &lt;hash&gt;”后,如果您尝试将最新更改提交到远程分支,您很可能会收到一条错误消息,指示“您的分支位于原点后面”。发生这种情况时,您需要使用 f 标签“git push -f”强制推送 (5认同)
  • 遵循建议后,您无法提交和推送.在糟糕提交退出后,您无法做任何事情的回购有什么好处? (4认同)
  • @jww 问题是“你如何恢复到某个提交”这个答案怎么错了? (2认同)
  • 您假设用户具有一个正在跟踪的远程存储库,并且已经将错误的提交推送到该存储库。 (2认同)
  • 投反对票是因为 OP 特别说“恢复到”,而恢复在 git 中有特殊的含义;重置可能会破坏推送历史记录,而恢复则不会。 (2认同)

Kit*_* Ho 44

您可以通过键入以下命令来还原工作目录和索引下的所有文件

git reset --hard <SHAsum of your commit>
Run Code Online (Sandbox Code Playgroud)

你也可以输入

git reset --hard HEAD #your current head point
Run Code Online (Sandbox Code Playgroud)

要么

git reset --hard HEAD^ #your previous head point
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你

  • `revert` 不是正确的命令。`revert` 应用一个新的提交来撤消先前的提交。它不需要“--hard”选项。 (2认同)
  • 阅读文档,[`revert`](http://www.kernel.org/pub/software/scm/git/docs/git-revert.html)撤消单个提交引入的更改,它不会重置索引和工作树_to_一个特定的提交,这是提问者正在寻找的.这就是[`reset`](http://www.kernel.org/pub/software/scm/git/docs/git-reset.html)的作用.`reset`确实采用`--hard`选项. (2认同)
  • 这是一个非常糟糕的做法。我刚刚丢失了所有最近的提交! (2认同)

mar*_*log 16

http://www.kernel.org/pub/software/scm/git/docs/git-revert.html

使用git revert <commit>将创建新的提交,以恢复您不想要的.

另一种选择:http://git-scm.com/docs/git-reset

git reset 将您的副本重置为您想要的提交.