1. 程式人生 > >如何撤回Git push 到遠端分支以後的方法

如何撤回Git push 到遠端分支以後的方法

這裡寫自定義目錄標題

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 <[email protected]>
Date:   Wed Jan 9 10:46:39 2019 +0800

    第3次 commit

commit 82056bb137f14ff4db4317d5e77d0bb872d8bb51
Author: zhanghuilong <
[email protected]
> Date: Wed Jan 9 10:45:01 2019 +0800 第2次 commit commit 23c83d0e4bb90fd81be37716e15ca7b4bbe92d84 Author: zhanghuilong <[email protected]> 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) [email protected]{0}: commit: 第3次 commit
82056bb [email protected]{1}: commit: 第2次 commit
23c83d0 [email protected]{2}: commit: 第一次 commit
d3fa4ea [email protected]{3}: commit (amend): add getbyId method
5fa550c [email protected]{4}: commit: add get method

5.區別點:

git reflog 可以檢視所有分支的所有操作記錄(包括已經被刪除的 commit 記錄和 reset 的操作)

二、進行版本回退

1. 本地回退

【 假如:第三次提交的是有問題的,想回退: 2890531 (HEAD -> develop, origin/develop) [email protected]{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) [email protected]{0}: commit: 第3次 commit
82056bb [email protected]{1}: commit: 第2次 commit
23c83d0 [email protected]{2}: commit: 第一次 commit
d3fa4ea [email protected]{3}: commit (amend): add getbyId method
5fa550c [email protected]{4}: commit: add get method
fc4e425 [email protected]{5}: commit: add get method
8ce1301 [email protected]{6}: commit: add find method
1f237ea [email protected]{7}: commit: add a method
78971d4 (origin/master, origin/HEAD, master) [email protected]{8}: checkout: moving from master to develop
78971d4 (origin/master, origin/HEAD, master) [email protected]{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) [email protected]{0}: reset: moving to 82056bb
2890531 (origin/develop) [email protected]{1}: commit: 第3次 commit
82056bb (HEAD -> develop) [email protected]{2}: commit: 第2次 commit
23c83d0 [email protected]{3}: commit: 第一次 commit
d3fa4ea [email protected]{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狀態顯示:
在這裡插入圖片描述

撤銷後的狀態:
在這裡插入圖片描述