如何撤回Git push 到远程分支以后的方法

这里写自定义目录标题

  • Git push 到远程分支以后的撤回方法
    • 解决流程
      • 一、查询Git提交日志记录。
        • 1. 首先要查看提交日志记录,找到记录ID,这个过程有两种方式
        • 2. git log
        • 3. git log --pretty=oneline
        • 4. git reflog
        • 5.区别点:
    • 二、进行版本回退
      • 1. 本地回退
      • git reset --hard【这里采用 --hard 演示】
      • 2.重新push 远程分支
      • 3.正确操作: git push origin 分支名 --force
      • 4.结果对比

Git push 到远程分支以后的撤回方法

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

解决流程

假如最近的这次push ,我们发现有错误或者提交到不该提交的分支上了或者其他原因,总之想从远程分支上撤销下拉。

一、查询Git提交日志记录。

1. 首先要查看提交日志记录,找到记录ID,这个过程有两种方式

1.采用 git log 命令
2.采用git reflog 命令

2. git log

这种查询 查询的日志量会比较臃肿,不太好看,可以进一步使用 格式化命令git log --pretty=oneline 输出简洁信息

huilong-MackPro:dragon zhanghuilong$ git log
commit 28905311ca76ebc526d2032f2d4e75bee7be4e97 (HEAD -> develop, origin/develop)
Author: zhanghuilong 
Date:   Wed Jan 9 10:46:39 2019 +0800

    第3次 commit

commit 82056bb137f14ff4db4317d5e77d0bb872d8bb51
Author: zhanghuilong 
Date:   Wed Jan 9 10:45:01 2019 +0800

    第2次 commit

commit 23c83d0e4bb90fd81be37716e15ca7b4bbe92d84
Author: zhanghuilong 
Date:   Wed Jan 9 10:37:19 2019 +0800

    第一次 commit

3. git log --pretty=oneline

huilong-MackPro:dragon zhanghuilong$ git log --pretty=oneline 
28905311ca76ebc526d2032f2d4e75bee7be4e97 (HEAD -> develop, origin/develop) 第3次 commit
82056bb137f14ff4db4317d5e77d0bb872d8bb51 第2次 commit
23c83d0e4bb90fd81be37716e15ca7b4bbe92d84 第一次 commit
d3fa4ea0de5b2f07a456b9ddf85dca0d1be20ae3 add getbyId method
fc4e4251cbf27d4352b06b25576c9eee7a238c09 add get method

4. git reflog

HEAD就代表当前 {n}, 0 表示当前分支,1代表上一次提交 ,以此类推。

huilong-MackPro:dragon zhanghuilong$ git reflog
2890531 (HEAD -> develop, origin/develop) HEAD@{0}: commit: 第3次 commit
82056bb HEAD@{1}: commit: 第2次 commit
23c83d0 HEAD@{2}: commit: 第一次 commit
d3fa4ea HEAD@{3}: commit (amend): add getbyId method
5fa550c HEAD@{4}: commit: add get method

5.区别点:

git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

二、进行版本回退

1. 本地回退

【 假如:第三次提交的是有问题的,想回退: 2890531 (HEAD -> develop, origin/develop) HEAD@{0}: commit: 第3次 commit】

通过log 我们可以查到,最近一次提交push的 记录ID为:2890531。

可以通过 命令:git reset 进行回退,可以有两种实现方式:

git reset –-soft  具体想回退的版本号
git reset –-hard 具体想回退的版本号

前者-soft 表示只是改变了HEAD的指向,本地代码不会回退发生变化,使用git status命令可以看到,同时也可以git commit提交。后者-hard直接会改变本地源码,不仅仅指向变化了,代码也会回退到第2次commit push后的状态,所以使用时要格外细心,必要时可以先 stash 当前代码,后面可以恢复unstash再次使用。

git reset --hard【这里采用 --hard 演示】

huilong-MackPro:dragon zhanghuilong$ git reflog
2890531 (HEAD -> develop, origin/develop) HEAD@{0}: commit: 第3次 commit
82056bb HEAD@{1}: commit: 第2次 commit
23c83d0 HEAD@{2}: commit: 第一次 commit
d3fa4ea HEAD@{3}: commit (amend): add getbyId method
5fa550c HEAD@{4}: commit: add get method
fc4e425 HEAD@{5}: commit: add get method
8ce1301 HEAD@{6}: commit: add find method
1f237ea HEAD@{7}: commit: add a method
78971d4 (origin/master, origin/HEAD, master) HEAD@{8}: checkout: moving from master to develop
78971d4 (origin/master, origin/HEAD, master) HEAD@{9}: clone: from https://github.com/hrsstd/dragon.git
huilong-MackPro:dragon zhanghuilong$ git reset --hard 82056bb
HEAD is now at 82056bb 第2次 commit
huilong-MackPro:dragon zhanghuilong$ 

如果你再执行一次 git reflog 就会看到 所有变更记录,例如:

huilong-MackPro:dragon zhanghuilong$ git reflog
82056bb (HEAD -> develop) HEAD@{0}: reset: moving to 82056bb
2890531 (origin/develop) HEAD@{1}: commit: 第3次 commit
82056bb (HEAD -> develop) HEAD@{2}: commit: 第2次 commit
23c83d0 HEAD@{3}: commit: 第一次 commit
d3fa4ea HEAD@{4}: commit (amend): add getbyId method
...

2.重新push 远程分支

正常情况你会遇到以下提示:
这个是我用idea 工具直接提交的提示语

Push rejected: Push to origin/develop was rejected

如果在控制台使用命令的话会更详细:重点是这句话
because the tip of your current branch is behind
提交失败,因为当前分支的版本低于远程分支的版本,所以要想覆盖掉它,可以使用force

huilong-MackPro:dragon zhanghuilong$ git push origin develop
To https://github.com/hrsstd/dragon.git
 ! [rejected]        develop -> develop (non-fast-forward)
error: failed to push some refs to 'https://github.com/hrsstd/dragon.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
huilong-MackPro:dragon zhanghuilong$ 

3.正确操作: git push origin 分支名 --force

huilong-MackPro:dragon zhanghuilong$ git push origin develop --force
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/hrsstd/dragon.git
 + 2890531...82056bb develop -> develop (forced update)
huilong-MackPro:dragon zhanghuilong$ 

4.结果对比

撤销前的GitHub状态显示:
如何撤回Git push 到远程分支以后的方法_第1张图片

撤销后的状态:
如何撤回Git push 到远程分支以后的方法_第2张图片

你可能感兴趣的:(Git)