Git rollback 1 pull

时间:2012-04-17 18:12:29

标签: git rollback

我有一个Web服务器,它服务于一个git存储库项目。当我对代码进行一些更改时,然后从服务器执行git pull。有时新代码崩溃,我希望能够回滚到最新的拉动,就在之前。我想用脚本做到这一点,而不必搜索最新的sha。我怎么能这样做?

编辑:只是为了澄清,我只想做一个动作,比如按下一个按钮,上面写着“哎呀!我刚刚做的最新拉动是一个错误,我希望我没有这样做”。我不想在这种情况下寻找sha或标签或其他任何东西,它更像是一个'撤消'功能。 然后我希望能够继续处理代码,服务器上的下一步需要带来最新的更改。

9 个答案:

答案 0 :(得分:77)

git reset --hard HEAD^1将从您提取的内容中退回一个提交。如果您希望它恢复到拉动之前的状态,请使用git reset --hard HEAD@{1}@{1}跟踪头部在最后一次操作之前所处的位置,这些操作在您的本地仓库中进行了更改,因此如果在您完成拉动之前推动了多次提交,它将返回多次提交。另请参阅git reflog以显示整个列表。

答案 1 :(得分:4)

我已使用以下命令还原上一次提交

git merge --abort

答案 2 :(得分:3)

git reset HEAD^应该带您进行上一次提交。有关详细信息,请参阅here

答案 3 :(得分:3)

在这种情况下,使用分支是有意义的,可以在失败或成功时轻松删除或合并。这将帮助您跟踪新内容,并且如果您有比“仅删除上次提交”更复杂的情况,那么可以使事情更清晰(特别是因为您希望使用脚本执行此操作)。所以在你的服务器上:

git fetch --all           # fetch new commits from remote
git checkout -b testing   # create and switch to branch 'testing'
git merge origin/master   # merge new commits from remote branch master
                          # (in branch 'testing')

...然后测试一下......如果成功:

git checkout master       # switch back to master
git merge testing

失败时:

git checkout master
git branch -D testing     # remove testing branch

但无论如何......你唯一的意思是删除最后一次提交,你可以按照Josh的指示使用git reset

答案 4 :(得分:2)

还有另一种丢弃最后一次拉动的方法

git reset --keep HEAD@{1}

答案 5 :(得分:1)

@ Karl Bielefeldt接受的答案并不适合我。我正在使用GIT版本2.10.0.windows.1 可能适用于旧版本。我收到“未知开关'e'”错误。 最后,我做了一些改动,但它确实奏效了。

以下是在之前拉动之前恢复到状态的步骤:

  1. 使用git reflog查看卡尔提到的列表。
  2. 从要移回的列表中选择提交版本。
  3. 执行git reset --hard <commit version>

答案 6 :(得分:0)

另一种方法是使用标签。您可以考虑在拉动之前使用某个版本号标记您的HEAD,然后执行拉动,然后如果您需要向后滚动HEAD,则可以执行git reset {tag name}这样如果拉有多个提交,您可以跳过到合并之前的位置。

答案 7 :(得分:0)

有两个命令:

  1. git reset --hard @ {1}

  2. git reset --hard ^ 1

第一个:回退到上一次拉动之前的状态。

second:回滚到上一次提交之前的状态(包括合并的代码)。

希望有帮助。

答案 8 :(得分:0)

您可以这样做:

git reset --hard 8b2574f

在其中找到8b2574f的地方

git reflog

8b2574f 代表任何HEAD,并且我的与您的不同。运行上面的命令,您会得到自己的。