獲取Git倉庫
-
從Github服務器上克隆已經存在的倉庫
首先打開Git的命令行窗口,找一個位置創建一個新文件夾,用來存放從github上克隆的項目:
打開github官網登入個人帳戶,選擇一個要克隆的項目,並復制其url:
執行git clone 命令:
因為這是個空的倉庫所以克隆完成后給出了警告,命令執行完成后文件夾中就有了一下內容:
開可以通過SSH鏈接來從Github服務器上克隆,后續在介紹
-
從本地已經存在的目錄中創建Git倉庫
例如:現在我的電腦上有這樣一個文件夾
現在我要對這個目錄中的內容進行管理,那么我們先打開Git命令行,並切換到該目錄,然后使用git init命令建立一個Git倉庫:
現在要了解Git中文件的兩種狀態:已跟蹤和未跟蹤
-
未跟蹤:指的是未被納入到版本控制的文件,它們既不存在於之前的快照記錄中,也沒有放入暫存區,例如從本地建立的Git倉庫
在開始的時候目錄下的所有文件都是未被跟蹤的
例如:在上面執行完git init命令后,在接着執行git status命令來查看目錄下的文件狀態:
顯示了當前目錄下未被追蹤的文件 -
已跟蹤:已經納入版本管理的文件,在之前的快照中有它們的記錄,在一段時間后它們的狀態可能是未修改,或者已修改,或者已經暫存,
對於從Github上克隆下來的項目,其狀態都是已經提交且未修改狀態
現在使用git add 命令來跟蹤目錄下的所有文件:
可以看出之前未被追蹤的文件都已經被追蹤,這些文件目前的狀態是已暫存
這里在git add 命令后面使用--all參數追蹤當前目錄下所有的文件,還可以使用git add filepath 的方式將某個路徑下的文件夾納入追蹤,
如果想只追蹤以某個文件后綴結尾的所有文件,那么可以使用*.xx參數,例如我要追蹤所有以.c結尾的文件,則使用git add *.c即可將所有以.c
結尾的文件納入追蹤,現在講這些已追蹤的文件使用git commit 命令進行提交:
因為我將文本編輯器設置為Notepad++,所以執行git commit命令后Notepad++就被啟動了,等待我輸入提交信息,輸入完成后關閉Notepad++即可。
來看看提交后的目錄下的工作狀態:
其實還可以使用git commit -m "伴隨提交的信息",這樣可以把要提交的信息追加到命令尾部,無需打開文本編輯器
現在再來嘗試修改一項目中的某個文件,並使用git status命令查看修改后文件狀態:
現在在使用git commit命令進行一次提交,然后查看狀態:
可以發現git commit命令執行完成后並沒有什么卵用,被修改的文件還是處於已修改狀態,因為git commit命令執行時提交的
是上一次執行git add命令后暫存的版本,也就是文件修改之前的版本,所以對於已經修改的文件,還是要使用git add命令來將
其暫存:
通過上面的實驗可以總結出如下的文件狀態變化流程:
-
忽略文件
有些文件我們不想納入版本控制中,例如:一些存放敏感信息的文件,一些編譯的中間產物等等..,但是每次執行git status命令時又會有未追蹤文件的提示,
對於有強迫症的同學,實在是難以忍受,那么可以在與.git文件夾平級的文件夾中建立一個無名的后綴名為.gitignore的文件,在這個文件中寫入要忽略的
文件后綴,例如:*.txt就是忽略所有以txt后綴的文件;在Windows系統中要注意是,在資源管理器中無法新建一個無名的文件,但是我們可以先建一個文件,
然后使用文本編輯器打開,然后另存為的時候不要給名稱,只給.gitignore后綴即可
例如:將txt文件排除在外,將一個名為ttt的文件排除在外
分別對這兩個文件執行add命令:
可以發現這兩個文件受.gitignore文件中的忽略規則限制無法暫存,使用git status命令查看時不在提示未追蹤,通過上圖報錯提示可以看出,如果想把
受限制的這兩個文件添加到暫存,可以在add命令中使用-f參數,強行add即可;
github上還有一個gitignore列表,已經編寫好了各種語言和IDE中應該忽略的文件:https://github.com/github/gitignore
關於.gitignore文件的編寫規則,請參考Pro Git 的2.2節
查看已暫存和未暫存的修改之間的差異
-
查看目錄中已經修改的文件和上次暫存文件的差異(git diff)
在目錄中新建一個文本文件,內容如下:
執行git add -all后在執行git commit,然后在修改改文本文件,向其中追加內容:
現在向文本文件中追加內容:
在執行git diff命令:
通過git diff命令可以看出目錄中被修改過的文件與上次暫存文件的區別 -
查看已緩存的文件和上次所提交文件的差異(git diff --cached/--staged)
接着上面的例子,現在使用git add 命令將修改過的文件添加到緩存中:
現在使用git diff --cached命令查看緩存文件與上次提交文件的差異:
-
查看上次提交的文件和目錄中被修改過文件的差異(git diff HEAD)
接着上例,執行git diff HEAD命令:
跳過暫存區域直接提交所有文件
前面的例子中我們都是先使用git add命令先進行暫存,然后在使用git commit進行提交,也可以使用git commit命令加上-a選項,
可以直接跳過暫存將所有已經追蹤過的文件暫存起來並提交.
例如:
考慮到特殊情況,如果文件修改后被緩存但是並未被提交,此時目錄中的文件又被修改,那么此時執行git commit -a命令后,
這次提交的快照的內容如目錄中被修改的文件保持一致:
修改上一次的提交
git commit --amend
這個命令將會把暫存區中的文件再次提交,如果上一次提交后暫存區中的內容沒有變化,那么這次提交只修改提交的信息,
如果暫存區發生了變化,例如我們修改了文件,並將其添加到了暫存區,此時使用該命令,會將暫存區的文件提交,帶有--amend
參數的commit命令只修改上一次的提交,不生成新的提交記錄。
例:暫存區未發生變化,執行git commit --amend
共做了兩次提交,由於第一次提交后暫存區沒有發生變化,所以第二次提交只修改了提交信息,雖然兩次提交,但是只有一次
提交記錄。
例:暫存區發生了變化,執行git commit --amend
我先修改文件,然后將其暫存,然后在執行git commit --amend:
提交后查看提交記錄,只有一條提交記錄