Git撤銷 回滾操作

2021-08-30 10:48:25 字數 1844 閱讀 1244

開發過程中,你肯定會遇到這樣的場景:

場景一:

糟了,我剛把不想要的**,commit到本地倉庫中了,但是還沒有做push操作!

場景二:

徹底完了,剛線上更新的**出現問題了,需要還原這次提交的**!

場景三:

剛才我發現之前的某次提交太愚蠢了,現在想要乾掉它!

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

情況一:檔案被修改了,但未執行git add操作(working tree內撤銷)

git checkout filename

git checkout .12

情況二:同時對多個檔案執行了git add操作,但本次只想提交其中一部分檔案

$ git add *

$ git status

# 取消暫存

$ git reset head 12

34情況三:檔案執行了git add操作,但想撤銷對其的修改(index內回滾)

# 取消暫存

git reset head filename

# 撤銷修改

git checkout filename12

34情況四:修改的檔案已被git commit,但想再次修改不再產生新的commit

# 修改最後一次提交

$ git add sample.txt

$ git commit --amend -m"說明"12

3情況五:已在本地進行了多次git commit操作,現在想撤銷到其中某次commit

git reset [--hard|soft|mixed|merge|keep] [commit|head]

具體引數和使用說明,請檢視:git pro深入淺出(二)中的重置揭秘部分

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

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

git checkout

如果你回到當前head指向

git checkout

情況一:撤銷指定檔案到指定版本

# 檢視指定檔案的歷史版本

git log

# 回滾到指定commitid

git checkout 12

34情況二:刪除最後一次遠端提交

方式一:使用revert

git revert head

git push origin master12

方式二:使用reset

git reset --hard head^

git push origin master -f12

二者區別:

revert是放棄指定提交的修改,但是會生成一次新的提交,需要填寫提交注釋,以前的歷史記錄都在;

reset是指將head指標指到指定提交,歷史記錄中不會出現放棄的提交記錄。

情況三:回滾某次提交

# 找到要回滾的commitid

git log

git revert commitid12

3刪除某次提交

git log --oneline -n5

git撤銷&回滾操作-log

git rebase -i "commit id"^

注意:需要注意最後的^號,意思是commit id的前一次提交

git rebase -i "5b3ba7a"^

git撤銷&回滾操作-rebase

git push origin master -f

Git 撤銷 回滾操作

workdir進行add操作將當前修改同步到 index,執行commit操作同步到head,執行push上傳到server。git reset head commitid 使用head或者commitid覆蓋index,不影響head和workdir,如果是在commit之後執行這個操作相當於同時...

Git撤銷 回滾操作

git checkout filename git checkout git add git status 取消暫存 git reset head 取消暫存 git resethead filename 撤銷修改 git checkout filename 修改最後一次提交 git add samp...

Git基礎系列 撤銷 回滾

撤銷一次commit head 1 git reset soft head 1git reset hard head 1git commit amend執行了git reset hard head,回滾 執行了add和commit,可回滾。圖4.1 提交log 圖4.1中,head 為各個執行的命令...