我如何撤消工作区中的某些更改并返回上次提交?

Enr*_*man 6 git

可能重复:
Git:恢复为先前的提交状态

我已经尝试过对我的代码进行一些更改,但是我搞砸了太多的东西(当你累了,而且已经很晚了,我就不会工作)而且我只想回到我上一次的提交.我不这样做,git add或者git commit很明显,如果我做的git pull一切都是最新的.

我认为这git checkout就是我需要的但它没有用......有什么帮助吗?

Mat*_*ght 12

提到的答案reset --hard会做你想要的(以及你可能会或可能不会做的其他事情),但你认为这checkout是你需要的命令是正确的.问题是checkout两个不同的东西,所以你需要为它提供一个路径参数:

git checkout .

从您的存储库的根目录就可以了.

  • `reset`是一个主要在*index*上运行的命令,可以通过一些额外的标志(`--hard`是其中之一)在工作目录上运行.`checkout`是一个在你的工作目录上运行的命令,可以通过检查树的内容或更新一组本地路径(不触及索引).`rebase`是一种重写部分提交历史(作为一系列补丁)的方法,可以将它应用到不同的基础(它与你的问题没有任何关系). (2认同)

Ada*_*ruk 5

不要git reset -hard永久!

请用

git stash -u 
Run Code Online (Sandbox Code Playgroud)

代替!如果你有一件工作在那里偶然发生,你仍然可以把它拿回来.这永远不会被推到你的遥控器上,除非你选择通过制作一个分支并推动它来实现这一点.

此外,您正走在正确的轨道上,您可以使用git checkout来完成同样的事情.语法是git checkout HEAD -- ..但它有同样的问题git reset --hard.坚持藏匿,你将来会挽救失去的头发.

更长的答案

以上解决方案可以恢复所有更改.但是,你问过如何摆脱一些变化.为了完整起见,我会加上这个.

要做到这一点,你可以

git add file1 file2 file3
git stash save --patch
Run Code Online (Sandbox Code Playgroud)

现在,系统将提示您确切要求消失的内容......直到达到任何级别的粒度.因此,如果您选择这样做,您可以安全地"拒绝"对单个文件进行少量更改.