這裏寫自定義目錄標題
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) 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狀態顯示:
撤銷後的狀態: