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

时间:2012-02-17 21:13:41

标签: git version-control

我正在编程。我添加漂亮的代码并提交并将其推送到我的仓库,如:

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

现在我进去搞砸一切。我没有发出git命令,因为我推动了美丽。如何让我的本地文件回到已提交的内容?

git pull说我当地的回购是“最新的”

git checkout将我的屏幕屏蔽掉,似乎没有任何改变。

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

我目前的解决方案是删除文件夹并重新开始回购。这不可能是正确的。

8 个答案:

答案 0 :(得分:17)

您可以重置为HEAD:git reset --hard HEAD

答案 1 :(得分:7)

更新:

最好的方法是

git stash -u

不要

git reset --hard HEAD

这是一项无法撤消的操作,除非您在Mac上使用时间机器或在Windows 8上使用新的备份服务,否则您可以真正完成工作。虽然我不使用,但Linux可能有这样的方案之一。

如果你还想要忽略文件,你可以

git clean -xdf

答案 2 :(得分:3)

  

git pull说我的本地回购是“最新的”

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

Git在确定要拉出的内容时,不会比较尚未提交给远程分支的更改;因此,从Gits的角度来看,您的本地远程存储库位于同一时间点,即使您的本地存储库具有未暂存的更改(您没有git add编辑的更改。

this page的底部有一个很好的图表,它向您展示了该过程的工作原理 - 您进行了一些更改,暂存它们(通过运行git add),然后最终将它们提交到存储库(通过创造性地命名为git commit)。

  

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

其他人指出了这样做的方法: git reset --hard HEAD(将索引[staged files]和工作树[unstaged files]重置为最后一次提交),但值得了解你想要实现的目标 - 如果我知道当我第一次弄乱我的工作树时, git如何跟踪我的文件,我已经节省了数小时的烦恼。

答案 3 :(得分:3)

由于您尚未提交任何内容,以下命令将重置您修改的文件:

git checkout .

答案 4 :(得分:2)

你可以尝试

git stash
git pull origin your-branch

答案 5 :(得分:1)

你试过git checkout -f master吗?

答案 6 :(得分:1)

如果您没有提交任何内容,只需执行$ git reset --hard即可。如果您已经提交了一些内容,则可以执行git reset --hard origin/master返回遥控器上的版本。

答案 7 :(得分:0)

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

您可以使用--soft而不是--hard
--hard您将失去您的更改 --soft保留已更改的提交文件