Git 的 4 个阶段的撤销更改
源自:Git 的 4 個階段的撤銷更改
參考:?廖雪峰git教程
git的基本概念圖:?
1. 基本概念:
- 3個步驟?
正常情況下,我們的工作流就是3個步驟,對應(yīng)上圖中的3個箭頭線:
git add . git commit -m "comment" git push- 1
- 2
- 3
- 4
- 1
- 2
- 3
-
4個區(qū)
工作區(qū)(Working Area)?
暫存區(qū)(Stage)?
本地倉庫(Local Repository)?
遠程倉庫(Remote Repository) -
5種狀態(tài)
未修改(Origin)?
已修改(Modified)?
已暫存(Staged)?
已提交(Committed)?
已推送(Pushed)
2. 檢查修改
git diff- 1
git diff這個命令只檢查我們的工作區(qū)和暫存區(qū)之間的差異
- 已暫存,未提交
- 1
git diff –cached 檢查暫存區(qū)和本地倉庫之間的差異
- 已提交,未推送
- 1
master就是你的本地倉庫,而origin/master就是你的遠程倉庫,master是主分支的意思,因為我們都在主分支上工作,所以這里兩邊都是master,而origin就代表遠程。
3. 撤銷修改
- 已修改,未暫存?
如果我們只是在編輯器里修改了文件,但還沒有執(zhí)行g(shù)it add .,這時候我們的文件還在工作區(qū),并沒有進入暫存區(qū),我們可以用:
- 1
- 2
- 3
來進行撤銷操作。
- 已暫存,未提交?
你已經(jīng)執(zhí)行了git add .,但還沒有執(zhí)行g(shù)it commit -m “comment”。這時候你意識到了錯誤,想要撤銷,你可以執(zhí)行:
- 1
- 2
- 3
- 4
git reset只是把修改退回到了git add .之前的狀態(tài),也就是說文件本身還處于已修改未暫存狀態(tài),你如果想退回未修改狀態(tài),還需要執(zhí)行g(shù)it checkout .。?
或許你已經(jīng)注意到了,以上兩個步驟都可以用同一個命令git reset –hard來完成。是的,就是這個強大的命令,可以一步到位地把你的修改完全恢復(fù)到未修改的狀態(tài)。
- 已提交,未推送?
你的手太快,你既執(zhí)行了git add .,又執(zhí)行了git commit,這時候你的代碼已經(jīng)進入了你的本地倉庫,然而你后悔了,怎么辦?不要著急,還有辦法。
- 1
還是這個git reset –hard命令,只不過這次多了一個參數(shù)origin/master,正如我們上面講過的,origin/master代表遠程倉庫,既然你已經(jīng)污染了你的本地倉庫,那么就從遠程倉庫把代碼取回來吧。
- 已推送?
很不幸,你的手實在是太快了,你既git add了,又git commit了,并且還git push了,這時你的代碼已經(jīng)進入遠程倉庫。如果你想恢復(fù)的話,還好,由于你的本地倉庫和遠程倉庫是等價的,你只需要先恢復(fù)本地倉庫,再強制push到遠程倉庫就好了:
- 1
- 2
- 附加
- 1
命令顯示從最近到最遠的提交日志?
如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上
- 1
- 1
- 2
- 1
- 1
總結(jié)
以上是生活随笔為你收集整理的Git 的 4 个阶段的撤销更改的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git checkout 命令详解
- 下一篇: can协议解析字符串的原理