工作區:指自己寫代碼的工作目錄,未進行 git add 操作之前。
暫存區:執行過 git add 操作之后,但是為執行 git commit 操作。
本地分支:執行過 git commit 操作,但是未執行 git push 操作。
遠程分支:執行過 git push 操作。
三種場景介紹:
1.git add . 但是未進行 commit 操作。 暫存區
2.git commit 但是未進行 git push 操作。 本地分支
3.git push 操作了。 遠程分支
第一種場景
執行了 git add 操作 未執行 git commit 操作
git reset HEAD . 撤回所有 add 的文件
git reset HEAD 文件名 撤回指定的文件
這個命令只改變暫存區代碼,並不影響其他區域代碼。
第二種場景
執行了 git commit 操作 未執行 git push 操作
git log 查詢提交日志 找到自己需要回滾的 版本號(commit_id)
git reset --hard commit_id 撤銷commit提交以及代碼的修改
或者
git reset --hard HEAD^ 回退到最近一次的提交
或者
git reset commit_id 僅僅撤銷本地倉庫的commit提交,代碼不變
git reset 的幾種模式
git reset主要有–soft –mixed –hard 三種方式
HEAD^的意思是上一個版本,也可以寫成HEAD~1
如果你進行了2次commit,想都撤回,可以使用HEAD~2
--mixed
不刪除工作空間改動代碼,撤銷commit,並且撤銷(git add .) 操作
這個為默認參數,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一樣的。
--soft
不刪除工作空間改動代碼,撤銷commit,不撤銷git add .
--hard
刪除工作空間改動代碼,撤銷commit,撤銷git add .
注意完成這個操作后,就恢復到了上一次的commit狀態。
如果不指定reset的模式,默認使用–mixed模式。
如果 commit 注釋寫錯了,我們可以使用 git commit --amend -m "備注" 既可以覆蓋上一次的備注信息。
第三種場景
第三種場景進行撤回的命令和第二個場景撤回命令一樣。但是撤銷之后 需要 進行 git push -f origin branchName 操作。這樣遠程倉庫對應分支代碼就會回滾掉。
注意:一定要注意回滾指定版本號,不應該是最新提交的版本號,而應該是最新一次commit之前的版本號,否則無法進行回滾的。
慎用 git reset --hard commit_id(版本號) 因為它會把自己工作區的修改內容也給刪除掉!!!