理解git結構與簡單操做(一)git的本質

前言

git已是一個很是普及且經常使用的代碼管理工具,算是程序員標配之一。但近期面試了大約十幾個3-5年前端工程師外加實習生,發現大多數的git水平都停留在add、commit、push、pull這個最簡單的流程,只會用GUI,甚至一點都沒接觸過的也大有人在。前端

重要的是,就算是知道要作什麼,也沒有人知道爲何要這麼作git

因此我想從git工做區劃分開始,解釋一下平時經常使用的一些git命令的真正含義,不過並不會太過深刻的解釋git的一些偏門內容。但願看過這篇文章的朋友能對git自己有必定的認識,知道用不一樣的命令時,git產生了哪些改變,作到使用命令時內心有數,更好的利用好git這個優秀的工具。程序員

本文不是給純萌新看的教程。閱讀本文須要知道git是什麼東西,以及一點簡單的命令使用。萌新請看這裏:廖雪峯大大的git教程面試

本文會把相對於git各個區域或者操做涉及到的git命令總結在段尾,能夠結合段中內容回想涉及到的命令在這裏完成了什麼做用,最後再綜合思考命令的做用。segmentfault

我的才疏學淺,文筆粗陋,如文中有知識、文筆錯誤,或者有什麼能夠改進的地方,請評論給我,感謝感謝。服務器

git是用來管理修改的

當咱們對一個項目進行修改後,須要對改動進行add、commit來把改動合併到本地分支,而後執行push來將此次的commit推送到分支關聯的遠程服務器的分支,這其實就是最簡單的git工做流程,這樣就能夠把本地修改的代碼上傳到服務器了。前端工程師

那麼,git的做用就僅僅是將本地的代碼放到服務器上嗎?顯然不是,要不git就僅僅是一個網盤了。工具

git與網盤的不一樣點之一在於:git管理的是文件的修改,是過程量,就像是物理中的加速度。spa

當你在本地修改文件以後,執行git status就會看到一片紅色的文件名:3d

如上圖,有三個文件的名字是紅的,分紅了兩個部分:

  1. Changes not staged for commit
  2. Untracked files

第一部分,這句話的主語是Changes,也就是說,這一段是尚未被staged,以用來提交的修改。關於staged的含義,先理解成「保存」,以後會詳細解釋。

第二個是沒有被跟蹤的文件

今後咱們能夠看出,git對於文件是這樣處理的:對於新文件,提交過一次以後,git就會跟蹤這個文件。每當文件內容進行修改,git就會按行分析出這個文件修改了哪些行。對於這些修改,用git diff <filename>就能夠查看到:

對於程序員來講,寫代碼的量上來以後,或者你修改的文件多了之後,可能就會出現忘掉修改了哪些內容之類的問題。git就會幫咱們跟蹤這些文件,把你的修改以簡單明瞭的方式展示出來。對於我這麼個前端來講,diff讓我減小了一大堆語法錯誤(逃。

把git抽象成幾個區域

咱們已經知道git管理的是文件的修改了,那麼有關於這些修改的提交都是一些什麼過程呢?

git將咱們的工做流程抽象成了幾個區域,總結一下就是:

  • 工做區(就是你的磁盤,你的文件)
  • 暫存區(剛纔提到的stage)
  • 版本庫(分支)
  • 遠程代碼庫(遠程分支)

如圖所示:

好,就根據此圖,歸結一下咱們一次工做並提交代碼的過程吧:

  1. 寫代碼(修改工做區)
  2. 把修改加入到暫存區:git add <filepath>
  3. 把暫存區的修改提交到版本庫中:git commit
  4. 此時本地版本庫就跟遠程倉庫狀態不一樣了,把本地庫推送到遠程倉庫保持同步:git push <origin> <branch>

如圖所示:

文章連接

理解git結構與簡單操做(一)git的本質

理解git結構與簡單操做(二)工做區與暫存區

理解git結構與簡單操做(三)認識版本庫與分支

理解git結構與簡單操做(四)合併分支的方法與策略

相關文章
相關標籤/搜索