很多 git 的初級教程,幾乎都有說先執行 git add ,然後 git commit。
那麼為什麼要先add然後commit呢?
git commit執行時,會提交暫存區的內容;
git add 命令會將我們做的修改新增到暫存區中。
這就是為什麼 git commit 之前要先執行 git add 的原因,如果不先執行add,那麼直接執行commit時不會把當前的修改內容提交到**庫中的。
git 本地資料管理,大概可以分為三個區,工作區,暫存區和版本庫。
- 工作區(working directory)
是直接編輯的地方,肉眼可見,直接操作。
- 暫存區(stage 或 index)
資料暫時存放的區域。
- 版本庫(commit history)
存放已經提交的資料,push 的時候,就是把這個區的資料 push 到遠端git倉庫了。
下圖各區之間的資料傳遞流程示意圖。
git對比命令
git diff 工作區 vs 暫存區
git diff head 工作區 vs 版本庫
git diff –cached 暫存區 vs 版本庫
1.剛開始,什麼操作都沒有,三個區的資料是一致的,執行 git diff 命令都為空
2.編輯檔案增加**,現在工作區內容發生變化,暫存區和版本庫內容不變。
3.執行git add 操作後,修改同步到暫存區,現在工作區和暫存區資料一致。
4.執行git commit 操作後,修改已經同步到版本庫,三區資料再次保持一致。
通過 checkout/stash/reset 等命令,通過不同的引數搭配使用,可以在工作區,暫存區和版本庫之間,輕鬆進行資料的來回切換。
修改了多個檔案,在不放棄任何修改的情況下,其中乙個檔案不想提交,如何操作?
(沒add操作 : git add 想提交的檔案
已經add: git reset –soft 將檔案從暫存區回滾到工作區,重新add)
修改到一半的檔案,突然間不需要或者放棄修改了,怎麼恢復未修改前檔案?
(git checkout)
**寫一半,被打斷去做其他功能開發,未完成**儲存?
(git stash 提交到快取區)
**寫一半,發現忘記切換分支了?
(git stash & git checkout)
**需要回滾了?(git reset)
命令 作用
git reset –soft commit_xxid
暫存區->工作區 將commit_xxid提交從暫存區回滾到工作區
git reset –mixed commit_xxid 版本庫->暫存區
將commit_xxid提交從版本庫回滾到暫存區
git reset –hard commit_xxid
版本庫->暫存區->工作區 三個區都清除commit_xxid提交
Git三大分割槽的概念解析
很多 git 的初級教程,幾乎都有說先執行 git add 然後 git commit。那麼為什麼要先add然後commit呢?git commit執行時,會提交暫存區的內容 git add 命令會將我們做的修改新增到暫存區中。這就是為什麼 git commit 之前要先執行 git add 的原因...
現今的三大分詞演算法介紹
中文分詞技術屬於自然語言處理技術範疇,對於一句話,人可以通過自己的知識來明白哪些是詞,哪些不是詞,但如何讓計算機也能理解?其處理過程就是分詞演算法。現有的分詞演算法可分為三大類 基於字串匹配的分詞方法 基於理解的分詞方法和基於統計的分詞方法。1 基於字串匹配的分詞方法 這種方法又叫做機械分詞方法,它...
程式設計的物質基礎 記憶體五大分割槽
在c c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 靜態儲存區 常量儲存區。1.棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。2.堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制...