git 回滾方式


git push 命用於從將本地的分支版本上傳到遠程並合並。

命令格式如下:

git push <遠程主機名> <本地分支名>:<遠程分支名>

如果本地分支名與遠程分支名相同,則可以省略冒號:

git push <遠程主機名> <本地分支名>

git remote 獲取遠程主機名

 

git commit 后,沒有push ,怎么撤銷

 

如果是撤銷到commit 之前,本地修改也放棄,可以

使用git  reset --hard ,

但是想保留本地修改,也想撤銷commit 可以使用

git reset  --mixed  HEAD^

除了mixed 還有其他兩個參數 

 

git reset --soft HEAD^

 

--soft僅僅撤銷 commit 

 

git reset --hard HEAD^ 

--hard  就全部撤銷了

示例

分支

說明

命令

1

test01

撤銷最近1次commit

git revert HEAD

2

test02

撤銷某個commit

git revert 3821210392184432de18b596cee58ab7924e39f9

3

test03

撤銷多個連續commit

git revert b39476b9c730d312266fe9bc7f63e795f9ba856f 3821210392184432de18b596cee58ab7924e39f9

4

test04

撤銷多個非連續commit

git revert b39476b9c730d312266fe9bc7f63e795f9ba856f 3821210392184432de18b596cee58ab7924e39f9

5

test05

重置為某個commit(不保存代碼)

git reset –hard 55d3012564e94a39f6686c0e532c0459ddc41ec4

6

test6

重置為某個commit(保存代碼)

git reset –soft 55d3012564e94a39f6686c0e532c0459ddc41ec4

 

Git撤銷&回滾操作(git reset 和 get revert)

Git 的工作流

工作區:在 git add xx 之前,在自己當前分支所修改的代碼內容!
暫存區:已經 git add xxx 進去,且沒有執行 git commit xxx 的。
本地分支:已經 git commit -m xxx 提交到本地分支的。
遠程分支:git push origin HEAD:refs/for/master HEAD 是本地,master是遠程分支

代碼回滾

在上傳代碼到遠程倉庫的時候,不免會出現問題,任何過程都有可能要回滾代碼:

1、在工作區的代碼(checkout ~ 修改工作區文件)

git checkout -- a.txt # 丟棄某個文件,或者
git checkout -- . # 丟棄全部

注意:git checkout – . 丟棄全部,也包括:新增的文件會被刪除、刪除的文件會恢復回來、修改的文件會回去。這幾個前提都說的是,回到暫存區之前的樣子。對之前保存在暫存區里的代碼不會有任何影響。對commit提交到本地分支的代碼就更沒影響了。當然,如果你之前壓根都沒有暫存或commit,那就是回到你上次pull下來的樣子了。

2、代碼 git add 到緩存區,並未 git commit 提交(reset ~ 修改暫存區文件)

git reset HEAD .
git reset HEAD a.txt

注意:這個命令僅改變暫存區,並不改變工作區,這意味着在無任何其他操作的情況下,
工作區中的實際文件同該命令運行之前 無任何變化

3、代碼 git commit 到本地分支,但沒有 git push 到遠程 (git reset --hard ~ commit 之后)

git log # 得到你需要回退一次提交的commit id
git reset --hard <commit_id> # 回到其中你想要的某個版本
git reset --hard HEAD^ # 回到最新的一次提交
git reset HEAD^ # 此時代碼保留,回到 git add 之前

4、代碼 git push 把修改提交到遠程倉庫 (git reset || git revert)

  • (1)通過git reset是直接刪除指定的commit

git log # 得到你需要回退一次提交的commit id
git reset --hard <commit_id>
git push origin HEAD --force # 強制提交一次,之前錯誤的提交就從遠程倉庫刪除

  • (2) 通過git revert是用一次新的commit來回滾之前的commit

git log # 得到你需要回退一次提交的commit id
git revert <commit_id> # 撤銷指定的版本,撤銷也會作為一次提交進行保存

  • (3) git revert 和 git reset的區別
    (a). git revert是用一次新的commit來回滾之前的commit,此次提交之前的commit都會被保留( 會有 兩次 commit id);
    (b). git reset是回到某次提交,提交及之前的commit都會被保留,但是此commit id之后的修改都會被刪除 ( 只有一次 commit id)

開發過程中,場景處理:

場景一: 糟了,我剛把不想要的代碼,commit到本地倉庫中了,但是還沒有做push操作!
撤銷

上述場景一,在未進行git push前的所有操作,都是在“本地倉庫”中執行的。我們暫且將“本地倉庫”的代碼還原操作叫做“撤銷”!


 
情況一.png
場景二:徹底完了,剛線上更新的代碼出現問題了,需要還原這次提交的代碼!
回滾

上述場景二,已進行git push,即已推送到“遠程倉庫”中。我們將已被提交到“遠程倉庫”的代碼還原操作叫做“回滾”!
注意: 對遠程倉庫做回滾操作是有風險的,需提前做好備份和通知其他團隊成員!

如果你每次更新線上,都會打tag,那恭喜你,你可以很快的處理上述場景二的情況


 
情況二.png

二者區別:
revert是放棄指定提交的修改,但是會生成一次新的提交,需要填寫提交注釋,以前的歷史記錄都在;
reset是指將HEAD指針指到指定提交,歷史記錄中不會出現放棄的提交記錄。

場景三:剛才我發現之前的某次提交太愚蠢了,現在想要干掉它!
情況三:需要回滾某次提交

找到要回滾的commitID
git log
git revert commitID
刪除某次提交
git log --oneline -n5

git rebase -i "commit id"^
注意:需要注意最后的^號,意思是commit id的前一次提交

git rebase -i "5b3ba7a"^
在編輯框中刪除相關commit,如pick 5b3ba7a test2,然后保存退出(如果遇到沖突需要先解決沖突)!

git push origin master -f
通過上述操作,如果你想對歷史多個commit進行處理或者,可以選擇git rebase -i,只需刪除對應的記錄就好。
rebase還可對 commit 消息進行編輯,以及合並多個commit。

git commit 后,沒有push ,怎么撤銷

如果是撤銷到commit 之前,本地修改也放棄,可以

使用git  reset --hard ,

但是想保留本地修改,也想撤銷commit 可以使用

git reset  --mixed  HEAD^

除了mixed 還有其他兩個參數 

git reset --soft HEAD^

--soft僅僅撤銷 commit 

git reset --hard HEAD^ 

--hard  就全部撤銷了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM