git後悔藥之如何回滾

2021-10-23 19:46:38 字數 3464 閱讀 3828

預備知識

git將專案的儲存分為4部分,每部分有自己作用,

見下圖:

整體過程可以簡述為

假設專案存在這麼乙個提交記錄:

$ git log

commit commit_id4 (head -> master)

author: test

date: thu aug 20 16:28:45 2020 +0800

第三次修改readme檔案

commit commit_id3 (head -> master)

author: test

date: thu aug 20 16:28:45 2020 +0800

第二次修改readme檔案

commit commit_id2

author: test

date: thu aug 20 16:28:19 2020 +0800

第一次修改readme檔案

commit commit_id1

author: test

date: thu aug 20 16:26:59 2020 +080

初始化專案

使用git reset即可完美解決回滾~

1、獲取當前提交的commit id

命令:git log

獲取到當前專案分支下的所有commit記錄;

假設上述提交錯誤的commit id為commit id:commit_id4這一次提交;

他的上一次提交就是commit id:commit_id3 ,我們要將修改回滾到commit_id3的時刻!

如何將剛才 commit的修改保留下來呢?

2、將某個commit id前的commit清除,並保留修改的**

命令:git reset 當前場景下就是:git reset commit_id3

將指定commit_id後的所有提交,都去除,並保留修改的**在本地的區域,也就是workspace中

3、修改**完成後,將修改好的**add到暫存區,並提交到本地倉庫中

命令:git add and git commit 當前場景下:git add . and git commit

將最新修改後的**commit

則提交後的提交記錄假設如下: 可以看到,我們錯誤提交的commit_id4提交記錄消失,取而代之的是我們更新**後提交的記錄commit_id5; 這樣就完成了本地的**修改和更新

$ git log

commit commit_id5 (head -> master)

author: test

date: thu aug 20 16:28:45 2020 +0800

第三次修改readme檔案-更新錯誤後提交

commit commit_id3 (head -> master)

author: test

date: thu aug 20 16:28:45 2020 +0800

第二次修改readme檔案

commit commit_id2

author: test

date: thu aug 20 16:28:19 2020 +0800

第一次修改readme檔案

commit commit_id1

author: test

date: thu aug 20 16:26:59 2020 +080

初始化專案

整體流程如下:

git log

git reset commit_id3

修改**

git add .

git commit -m '第三次修改readme檔案-更新錯誤後提交'

如果我想要不保留回滾commit的修改,直接刪除掉修改!該怎麼處理呢?首先整體看一下git reset的命令還是先假設有這麼乙個提交鏈:

commit_id1 --> commit_id2 --> commit_id3 --> commit_id4

git reset commit_id2:

reset是將head重新定位到commit_id2上,對於commit_id3 和 commit_id4 和本地當前的修改,對於不同的引數param,會有不同的處理;

reset命令的三種處理模式:

如果想要只操作修改中間的乙個commit,不對其他的commit產生影響; 也就是類似於我們只修改commit_id2,而對commit_id3 和 commit_id4無影響,該怎麼處理呢?

適用場景:在專案開發中,突然發現在前幾次的提交中,有一次提交中包含乙個bug; 當然我們可以進行乙個新的修改,然後再提交一次; 但是,不優雅哈哈; 我們可以直接重做有bug的commit~

為什麼不直接去再新增乙個commit呢?git revert是用於「反做」某乙個版本,以達到撤銷該版本的修改的目的

比如,我們commit了三個版本(版本

一、版本二、 版本三),突然發現版本二不行(如:有bug),想要撤銷版本二,但又不想影響撤銷版本三的提交,就可以用 git revert 命令來反做版本二,生成新的版本四,這個版本四里會保留版本三的東西,但撤銷了版本二的東西;

git revert -e commit_id

重做commit_id的提交資訊,生成為乙個新的new_commit_id

git revert -n commit_id

重做commit_id的提交,將commit_id中修改,放到index區,我們可以對他重新做修改並重新提交

revert 對比 reset:

如果我在一次開發中,發現某個檔案修改錯誤了,想要將檔案恢復到剛pull**時的狀態怎麼辦呢?

git checkout還有回滾指定檔案的修改的功能:git checkout – (用過vscode的同學可能經常在左側區域點放棄所有更改的圖示)

上述語句的作用,就是將file_name的本地工作區的修改全部撤銷,有兩種情況:

總之,就是讓指定的檔案回滾到最近的一次git add 或者 git commit時的狀態!

git常見後悔藥

撤銷本地全部沒有git add過的修改 git checkout 使用庫上檔案覆蓋本地修改 當然是指用本地庫覆蓋 git checkout file name 回退掉某一次commit,回退方式是自動生成乙個反向的commit,不會影響其他commmitgit revert commitid 將gi...

git上的後悔藥

修改上一次提交的文案 git commit amend 複製 我第一次提交時執行了命令 git add git commit m add some thing 但是commit後悔了,需要做一些修改再提交 再次提交的時候執行 git commit amend 這時候log日誌只顯示一條資訊 撤銷操作...

Git 中的後悔藥

處理生活中需要 撤回的場景 工作區中的 想撤回 沒有提交過的 git checkout add 到暫存區的 想撤回。git reset head提交到本地倉庫的 想撤回。git reset soft 版本號 也可以修改soft為hard放棄版本後的所有修改。遠端提交的 想撤回。在本地修改完之後,使用...