Git三大分割槽的概念解析

2022-09-23 20:03:14 字數 1479 閱讀 6467

很多 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分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制...