Git:如何回滚到上次推送/提交

34

我正在编程。我添加了漂亮的代码,然后提交并将其推送到我的存储库,就像这样:

git add *
git commit
//writes message
git push unfuddle master

现在我进去就把一切都弄糟了。自从我推送了美好的东西以来,我没有发出过git命令。如何让我的本地文件回到提交的状态?

git pull 告诉我本地仓库是“最新的”

git checkout 在我的屏幕上输出了大量信息,但似乎没有改变任何东西。

明确一下:我不想修改远程仓库,只是让我的本地仓库看起来像服务器上一样。

我的当前解决方案是删除文件夹并重新克隆仓库。这肯定不对。

8个回答

28
您可以重置到HEAD: git reset --hard HEAD

1
我发现git stash也可以达到我想要的效果。 - Mikey
2
当然,你也可以使用你最近的硬盘备份来恢复数据。:) - three

23

更新:

最好的方法是

git stash -u

不要这样做

git reset --hard HEAD

这是一个不可逆的操作,如果你没有在Mac上使用时间机器或者Windows 8上的新备份服务,那么你可能会彻底删除你的工作。Linux可能有类似的方案,但我没有使用过。如果你也想删除被忽略的文件,你可以:

git clean -xdf

8

由于您还没有提交任何内容,因此以下命令将重置您修改的文件:

git checkout .

3

git pull说我的本地仓库是“最新的”

git pull告诉你你的仓库是最新的,因为你的本地仓库和远程仓库都指向相同的HEAD(最后一次提交)。这是由于你的git push,它将远程与你的本地仓库同步。

当Git决定要拉取时,它不会比较尚未提交到远程分支的更改;因此,从Git的角度来看,即使你的本地仓库有未暂存的更改(尚未git add),你的本地远程仓库在同一时间点上。

这个this page底部有一个漂亮的图表,展示了整个过程——你进行一些更改,将它们暂存(通过运行git add),最后将它们提交到仓库中(通过创意命名的git commit)。

明确一点:我不想修改我的远程仓库,只是让本地仓库看起来像服务器。

其他人已经指出了实现这一目标的方法:git reset --hard HEAD(将索引[暂存文件]和工作树[未暂存文件]重置为最后一次提交),但值得理解你要实现的目标——如果我第一次弄乱了工作树时知道Git是如何跟踪我的文件的,我就可以省下几个小时的苦恼。


2

你可以尝试

git stash
git pull origin your-branch

1

你试过 git checkout -f master 吗?


1
如果您没有提交任何内容,可以简单地执行$ git reset --hard。如果您已经提交了一些东西,可以执行git reset --hard origin/master回到远程版本。

0

git checkout branchname git reset --hard c4e0424 git push origin +branchname

你可以使用--soft代替--hard
--hard会丢失你的更改
--soft保留你的更改文件提交


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接