Git回滚1拉

Git回滚1拉,git,rollback,Git,Rollback,我有一个web服务器,为一个git存储库项目提供服务。当我对代码做一些更改时,我会从服务器上进行git拉取。有时新代码会崩溃,我希望能够回滚到最新的pull,即之前的pull。我想用一个脚本来实现这一点,而不必搜索最新的sha。我该怎么做 编辑:我只是想澄清一下,我只想做一个动作,比如按下一个按钮,上面写着“哎呀!我刚才做的这一次拉动是一个错误,我希望我没有那样做”。我不想在这种情况下寻找sha或标签或其他任何东西,它更像是一个“撤销”功能。 然后,我希望能够继续处理代码,服务器上的下一次拉动需

我有一个web服务器,为一个git存储库项目提供服务。当我对代码做一些更改时,我会从服务器上进行git拉取。有时新代码会崩溃,我希望能够回滚到最新的pull,即之前的pull。我想用一个脚本来实现这一点,而不必搜索最新的sha。我该怎么做

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

git reset HEAD^
应将您带到上一次提交。有关更多信息,请参阅。

另一种方法是使用标签。想法是你可以在拉之前用一些版本号标记你的头,做拉,然后如果你需要回滚头,你可以这样做
git reset{tag name}
,如果拉有多个提交,你可以跳回到合并之前的位置

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

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

git reset--hard HEAD ^1
将从您提取的内容中收回一次提交。如果您想让它恢复到拉取之前的状态,请使用
git reset--hard HEAD@{1}
@{1}
跟踪上次在本地repo中更改头部的操作之前头部所在的位置,因此,如果在执行拉操作之前推送了几个提交,它将返回几个提交。另请参见
git reflog
以显示整个列表

卡尔·比勒费尔德接受的答案对我来说并不合适。我使用的是GIT版本2.10.0.windows.1 这可能适用于旧版本。我收到“未知开关‘e’”错误。 最后,我做了一些改变,效果很好

以下是恢复到上次拉动前状态的步骤:

  • 使用
    git reflog
    查看前面提到的列表
  • 从要移回的列表中选择提交版本
  • 执行
    git重置--硬

  • 还有另一种方法可以放弃最后一次拉动

    git reset --keep HEAD@{1}
    

    有两个命令:

  • git重置--硬@{1}

  • git重置--硬^1

  • 第一:回滚到上次拉动前的状态

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


    希望有帮助。

    我使用了下面的命令来恢复上次提交

    git merge --abort
    

    您可以这样做:

    git reset --hard 8b2574f
    
    其中8b2574f是通过执行以下操作找到的

    git reflog
    

    8b2574f代表任何头部,而且我的头部与你的不同。当你运行上面的命令时,你会得到你的。

    它实际上是
    git reset--hard HEAD ^
    ,除非你不想接触你的工作目录。根据这个问题,在新的拉取导致问题后,回购只需要回滚,所以工作目录应该是空的。这是正确的命令——它将返回最后一次提交,也就是说,它将取消上次提交的所有文件的保存。但该项目仍将在新代码上运行。在这之后,我运行了“git reset--hard”,以消除所有拉入的更改,我的项目恢复正常。谢谢你,乔希。很有意思,那我怎么才能恢复正常运作呢?我的意思是,如果对错误的代码进行一些更正,我可以直接到服务器上再次进行git拉取以获得最新的更改吗?是的,它将处于一种您从未拉取过的状态,因此您通常会做的任何事情都可以完成。这里有一点很好,这不是我所想的,但可以很好地工作。我将尝试使用最简单的方法。这些命令对我不起作用,但在我添加HEAD时起了作用,比如
    git reset--hard HEAD@{1}