一些必須要知道的概念
git的三個工作區域:工作目錄、暫存區、git倉庫。
工作目錄:其實就是本地文件磁盤上的文件或目錄;
暫存區:是一個文件,保存了下次提交的文件列表信息,一般在git倉庫目錄中;
git倉庫:就是保存項目或文件的元數據和對象數據庫的。其中包含了你提交給git的所有完整版本庫。
基本的git工作流程如下:
-
在工作目錄中修改文件。
-
暫存文件,將文件的快照放入暫存區域。
-
提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。
創建一個git倉庫
git init
進入你想要讓git管理的目錄,執行上面的命令,便初始化了一個git倉庫。
這時,會在該目錄下創建一個名為.git子目錄,.git子目錄下的文件其實就是git倉庫的主要文件,一般不建議手動修改或刪除它。
另外也可以從遠程clone一個倉庫到本地。
一般地,可以從github上clone一個你關注的項目下來。
git clone [url]
例如:git clone https://github.com/git/git.git
在git倉庫中的一些基本操作
下面結合一個具體實例進行操作。
1、新建一個文件README.md,並交給git倉庫管理。

可以看到我在mytestgit目錄下先執行了git init 命令初始化了一個倉庫。
然后新建了一個README.md文件。
此時,可以使用git status命令查看倉庫狀態。

可以看到有一個標紅的文件是提示Untracked files,意思是還未交給git倉庫跟蹤管理,而且提示你可以使用git add命令來添加。
使用git add命令將文件添加到暫存區中。
git add README.md
繼續使用git status命令查看狀態

狀態顯示,當前在master分支,還未有過提交。提示下面綠色的文件可以提交或者從暫存區刪除。
接下來,我們在新建一個test.txt文件,並使用git add命令交給git倉庫跟蹤。然后修改該文件,再查看狀態。

出現在 Changes not staged for commit 這行下面的test.txt文件內容發生了變化,但是還未提交到暫存區中。如果要暫存這次修改,則需要繼續運行git add命令。
因此,可以看到git add命令是多功能的,可以用它開始跟蹤新文件,還能用它將已跟蹤的文件再次放到暫存區中(即更新暫存區中的內容)。
2、使用git commit命令提交文件到git倉庫
將上個步驟的兩個文件我們提交到git倉庫。
git commit -m "第一次提交新增了兩個文件"

可以看到,提交后它會告訴你,當前是在哪個分支(master)提交的,本次提交的完整 SHA-1 校驗和是什么(18350c3),以及在本次提交中,有多少文件修訂過,多少行添加和刪改過。
請記住,提交時記錄的是放在暫存區域的快照。 任何還未暫存的仍然保持已修改狀態,可以在下次提交時納入版本管理。 每一次運行提交操作,都是對你項目作一次快照,以后可以回到這個狀態,或者進行比較。
另外有一種方法可以跳過使用git add添加到暫存區然后再提交的方式。
即只要在提交的時候,給 git commit 加上 -a 選項,Git 就會自動把所有已經跟蹤過的文件暫存起來一並提交,從而跳過 git add 步驟:
我們再次修改了test.txt文件,然后使用-a選項直接commit。

移除文件的操作
一種情況是從git倉庫移除文件,同時刪除磁盤上目錄上的文件。
使用git rm完成,我們刪除test.txt文件看下。

可以看到test.txt文件已經從被刪除了。刪除之后再使用git commit提交刪除。

另外一種情況是,我們只想從git倉庫中刪除,但是仍然保留當前工作目錄中的文件。可以使用--cached選項實現。
例如我們將版本庫中的111.txt文件從版本庫中刪除,但是磁盤上的文件任然保留。

查看提交的歷史記錄
使用git log命令。

默認不用任何參數的話,git log 會按提交時間列出所有的更新,最近的更新排在最上面。 正如你所看到的,這個命令會列出每個提交的 SHA-1 校驗和、作者的名字和電子郵件地址、提交時間以及提交說明。
git log 有許多選項可以幫助你搜尋你所要找的提交, 接下來我們介紹些最常用的。
一個常用的選項是 -p,用來顯示每次提交的內容差異。 你也可以加上 -2 來僅顯示最近兩次提交:

還有--stat 選項在每次提交的下面列出所有被修改過的文件、有多少文件被修改了以及被修改過的文件的哪些行被移除或是添加了。 在每次提交的最后還有一個總結。

git log 的常用選項說明

撤銷操作
1、工作區代碼的撤銷。
文件還未add到暫存區域,此時做出的修改可以通過git checkout -- <file>命令來撤銷修改。
2、add到暫存區的代碼想撤銷
使用git reset HEAD <file>命令從暫存區撤銷到工作區,然后再從工作區撤銷。
3、提交到git倉庫的代碼回退
使用命令git reset --hard <版本號>
