前言
在之前寫了一篇🚀Github 最正規的協作工作流的文章中,和大家推薦的非常專業的码农高天又出新的內容了。
這次的影片是關於使用git過程中的撤銷操作的,我一樣整理成筆記並加上一些自己的補充記錄下來。
而且才短短兩三個月,他訂閱人數已經衝到8000多了,果然寶藏是不會被埋沒的嗎 🤩
初始狀態
在git運作流程中,包含4個區域
- Disk:硬碟實際儲存的內容
- Staging:暫存區
- Local:本地的git
- Remote:遠端的git(例如Github
假設在初始狀態下,4個區域目前都是同步的,都是
Init
Disk層級的修改&撤銷
修改
何時產生修改?
當一個已經被git追蹤的檔案,只要被修改後
就會自動被追蹤到
如何查看變化?
git diff # 查看目前修改後的文件,有什麼不同
撤銷
使用git restore
撤銷Disk的修改
git restore <changed_file> # 舊版本會使用 git checkout
在比較早版本的
git checkout
有兩個功能:
- 切換分支:目前仍然使用,如
git checkout <branch>
- 檢出文檔:目前被
git restore
和git switch
取代
Staging層級的修改&撤銷
修改
何時產生修改?
對於Disk層級的修改,使用
git add <changed_file>
即可添加到git追蹤的暫存區
如何查看變化?
git status # changes to be committed
撤銷
只撤銷Staging層級的修改
git restore --staged <chaged_file> # 亦可使用 git reset
- 效果是讓Commit的時候不會包含該檔案變化
- 不會對Disk的程式進行修改
- 只會撤銷前面的
git add
操作
撤銷到Disk層級的修改
git checkout HEAD <changed_file>
HEAD
表示最近的一次Commit- 目前就是
Init
- 目前就是
- 會同時撤銷
- 檔案在的硬碟的修改
- 添加到 git 暫存區的部分
Local層級的修改&撤銷
修改
何時產生修改?
對於Staging層級的修改,使用
git commit
此修改就成為了一個commit被加入到local git中
如何查看變化?
git log # 查看 commit 記錄
一些相關參數
--oneline
:以簡潔的單行方式顯示提交歷史。--graph
:以圖形化的方式顯示提交歷史的分支和合併情況。--stat
:顯示每個提交的簡要統計信息,包括修改的文件和行數變化。--author=<author>
:只顯示特定作者的提交歷史。<file>
:只顯示與特定文件相關的提交歷史。--since=<date>
:只顯示從指定日期之後的提交歷史。
撤銷
只撤銷Local git層級的修改
git reset --soft HEAD~1
HEAD~1
表示前一個commit- 透過移動HEAD的位置,撤銷到前一個commit
--soft
表示不撤銷暫存區內容,差異見下方- 效果
- Disk:不變
- Staging:不變
- Local:撤銷
撤銷Local git與Staging層級的修改
git reset HEAD~1
# 等價於
# git reset --mixed HEAD~1
- Disk:不變
- Staging:撤銷
- Local:撤銷
撤銷Local git、Staging、Disk層級的修改
git reset --head HEAD~1
- Disk:撤銷
- Staging:撤銷
- Local:撤銷
[!warning]
這個修改指令雖然是可以撤銷的
但是操作起來會很麻煩
另一種撤銷方式:revert
效果是建立一個反作用的commit並加在後面
- 若前面加一行,則添加一個減一行的commit
- 這個反作用commit稱為:-change
使用revert
抵銷最後一個commit
git revert HEAD
- 增加一個 -change commit,來抵銷最後一個commit的效果
使用revert
的好處
reset
:只能撤銷到前N個commit的位置revert
:可以撤銷其中任意一個commit的效果
git revert <commit_id>
Remote層級的修改&撤銷
修改
何時產生修改?
對於Local層級的修改,使用
git push
就可以把修改的變化push到遠端
公有分支 vs. 個人分支
- 公有分支
- 不只你自己一個人在使用
- 例如:大多數項目的主分支
- 只能往前、不能後退
- 因為只要做了刪除操作,其他人的分支就會被弄亂
- 個人分支
- 自己一個人使用的分支
- 例如:自己的feature branch
撤銷
撤銷公有分支
git revert HEAD
git push
- 因為無法在公有分支上刪除commit
- 所以必須要使用
revert
撤銷私人分支
git reset --head HEAD~1
git push -f
- 必須使用
push -f
強制推送
整理
內容整理成圖片,歡迎有需要的存下來收藏。