一张图看明白Git的四个区五种状态
生活随笔
收集整理的這篇文章主要介紹了
一张图看明白Git的四个区五种状态
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
五種狀態間的順序操作
四個區
- 工作區(Working Area)
- 暫存區(Stage)
- 本地倉庫(Local Repository)
- 遠程倉庫(Remote Repository)
五種狀態
- 未修改(Origin)
- 已修改(Modified)&未追蹤(Untracked)
- 已暫存(Staged)
- 已提交(Committed)
- 已推送(Pushed)
順序操作
- 第零步:工作區與倉庫保持一致
- 第一步:文件增刪改,變為已修改狀態
- 第二步:git add ,變為已暫存狀態
- 第三步:git commit,變為已提交狀態
- 第四步:git push,變為已推送狀態
?
五種狀態間的撤銷操作
已修改,但未暫存
$ git diff # 列出所有的修改 $ git diff xx/xx.py xx/xx2.py # 列出某(幾)個文件的修改 $ git checkout # 撤銷項目下所有的修改 $ git checkout . # 撤銷當前文件夾下所有的修改 $ git checkout xx/xx.py xx/xx2.py # 撤銷某幾個文件的修改 $ git clean -f # untracked狀態,撤銷新增的文件 $ git clean -df # untracked狀態,撤銷新增的文件和文件夾# Untracked files: # (use "git add <file>..." to include in what will be committed) # # xxx.py已暫存,未提交
這個時候已經執行過git add,但未執行git commit,但是用git diff已經看不到任何修改。
因為git diff檢查的是工作區與暫存區之間的差異。
$ git diff --cached # 這個命令顯示暫存區和本地倉庫的差異 $ git reset # 暫存區的修改恢復到工作區 $ git reset --soft # 與git reset等價,回到已修改狀態,修改的內容仍然在工作區中 $ git reset --hard # 回到未修改狀態,清空暫存區和工作區git reset --hard 操作等價于 git reset 和 git checkout 2步操作
已提交,未推送
執行完commit之后,會在倉庫中生成一個版本號(hash值),標志這次提交。之后任何時候,都可以借助這個hash值回退到這次提交。
$ git diff <branch-name1> <branch-name2> # 比較2個分支之間的差異 $ git diff master origin/master # 查看本地倉庫與本地遠程倉庫的差異 $ git reset --hard origin/master # 回退與本地遠程倉庫一致 $ git reset --hard HEAD^ # 回退到本地倉庫上一個版本 $ git reset --hard <hash code> # 回退到任意版本 $ git reset --soft/git reset # 回退且回到已修改狀態,修改仍保留在工作區中。已推送到遠程
$ git push -f orgin master # 強制覆蓋遠程分支 $ git push -f # 如果之前已經用 -u 關聯過,則可省略分支名慎用,一般情況下,本地分支比遠程要新,所以可以直接推送到遠程,但有時推送到遠程后發現有問題,進行了版本回退,舊版本或者分叉版本推送到遠程,需要添加 -f參數,表示強制覆蓋。
總結
- 首先,先用git status查看下當前狀態。
- git reset可以作用于本地倉庫,用于回退/前進到任意版本,也可以作用于暫存區,用于撤銷暫存區修改。有hard和soft2個參數。soft參數可以省略,soft參數表示撤銷的修改仍放在工作區中。
- git checkout用于撤銷刪除和修改,git clean -df用于撤銷新增。
- git diff可以查看工作區、暫存區、倉庫之間的修改和差異,參數不同。
總結
以上是生活随笔為你收集整理的一张图看明白Git的四个区五种状态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何理解git的快照?
- 下一篇: git diff命令输出的含义