Git:如何回滚到最后一次推送/提交

Git:如何回滚到最后一次推送/提交,git,version-control,Git,Version Control,我正在编程。我添加了漂亮的代码,提交并将其推送到我的回购协议中,如: git add * git commit //writes message git push unfuddle master 现在我进去把一切都搞砸了。自从推送beauty之后,我还没有发出git命令。如何使本地文件返回到已提交的文件 git pull说我的本地回购是“最新的” git checkout弹出我的屏幕,似乎没有任何改变 要明确的是:我并没有试图修改我的远程repo,只是让我的本地repo看起来像服务器 我目前的

我正在编程。我添加了漂亮的代码,提交并将其推送到我的回购协议中,如:

git add *
git commit
//writes message
git push unfuddle master
现在我进去把一切都搞砸了。自从推送beauty之后,我还没有发出git命令。如何使本地文件返回到已提交的文件

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

git checkout
弹出我的屏幕,似乎没有任何改变

要明确的是:我并没有试图修改我的远程repo,只是让我的本地repo看起来像服务器


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

您可以重置为磁头:
git重置-硬磁头
您是否尝试过
git签出-f master

更新:

最好的方法是

git stash -u
不要

git reset --hard HEAD
这是一个无法撤消的操作,除非您在Mac上使用time machine或Windows 8上的新备份服务,否则您可以真正地取消您的工作。Linux可能有这样一个方案,尽管我没有使用

如果您还希望忽略的文件被核化,您可以

git clean -xdf

如果您没有提交任何内容,只需执行
$git重置--hard
。如果您已经提交了一些内容,您可以执行
git重置--hard origin/master
以返回到远程设备上的版本

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

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

Git在决定拉取什么时,不会比较尚未提交到远程分支的更改;因此,从git的角度来看,您的本地存储库和远程存储库处于同一时间点,即使您的本地存储库有未过时的更改(未添加的更改)

底部有一个很好的图表,向您展示了流程的工作原理-您可以进行一些更改,进行阶段性更改(通过运行
git add
),然后最终将其提交到存储库(通过创造性地命名的
git commit

要明确的是:我并没有试图修改我的远程repo,只是让我的本地repo看起来像服务器

其他人指出了实现这一点的方法:
git reset——硬头(将索引[暂存文件]和工作树[未暂存文件]重置为最后一次提交),但了解您试图实现的目标是值得的——如果我第一次把工作树弄糟时就知道git是如何跟踪我的文件的,我就可以省下几个小时的烦恼

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

git checkout .
你可以试试

git stash
git pull origin your-branch

git签出分支名称
git复位——硬c4e0424
git推送原点+分支名称

您可以使用--soft而不是--hard
--硬
您将丢失更改

--soft
保留更改后的提交文件

git stash
我发现它也可以做我想做的事。当然,您也可以使用上一次硬盘备份到达那里:)