忽略檔案:
在實際開發過程中總有些檔案無需納入Git的管理,比如日志檔案、臨時檔案等
在這種情況下,我們可以在工作目錄中建立一個名為.gitignore的檔案,列出要忽略的檔案名或者表達式
例:cat .gitignore
*.[oa]
*~
*.log
第一行告訴Git忽略所有以.o或.a結尾的檔案
第二行告訴Git忽略所有以 ~ 結尾的檔案
第三行告訴Git忽略所有以.log結尾的檔案
要養成一開始就設定好.gitignore檔案的習慣,以免将來誤送出這類無用的檔案
.gitignore的格式規範:
所有空行或者以#開頭的行都會被Git忽略
可以使用标準的glob模式比對
比對模式可以以(/)開頭防止遞歸
比對模式可以以(/)結尾指定目錄
要忽略指定模式以外的檔案或目錄,可以在模式前加上驚歎号(!)取反
glob模式指shell指令行所使用的統配符
*:比對零個或多個任意字元
?:比對任意一個字元
**:表示比對任意中間目錄,比如'a/**/z',可以比對 a/z,a/b/z 或'a/b/c/z'等
[abc]:比對任何一個列在方括号中的字元;
[0-9]:比對0到9的數字
[a-z]:比對a到z的字母
[A-Z]:比對A到Z的字母
.gitignore例子:
# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf
GitHub上有一個十分詳細的針對數十種項目及語言的.gitignore檔案清單
位址:https://github.com/github/gitignore
git diff檢視具體修改的内容
echo "/usr/bin/python" > test.py #修改檔案
git diff #比較目前檔案和快照中檔案的差異
diff --git a/test.py b/test.py #産生差異的檔案
index df2203b..d5aba22 100644
--- a/test.py
+++ b/test.py
@@ -1 +1 @@
-coding:utf-8 #"-"表示删除的行
+/usr/bin/python #"+"表示新增的行
git diff --cached(或--staged)檢視已暫存的下次送出裡的内容:
git add test.py #将檔案添加到暫存區
git diff #這時使用git diff将什麼也不會輸出,應為檔案已經放入暫存區
git diff --cached #檢視暫存區的檔案差異
diff --git a/test.py b/test.py
@@ -1 +1 @@
-coding:utf-8
+/usr/bin/python
git difftool #打開一個文本編輯器顯示檔案差異(适合檔案少時使用,較為直覺)
送出更新
在送出之前,請一定要确認還有什麼修改過的或建立的檔案還沒有git add過,否則送出的時候不會記錄這些還沒暫存起來的變化
每次準備送出前,先用git status看下,是不是都已暫存起來了,然後再運作git commit送出
git commit會啟動一個預設文本編輯器以便輸入本次送出的說明(使用git config --global core.editor='vim'設定預設的編輯器)
編輯器會顯示類似下面的資訊:
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
# modified: test.py
#開頭的為注釋資訊不會送出到git倉庫中
如果想要更詳細資訊,可以用-v選項,這會将你所做的改變的diff輸出放到編輯器
退出編輯器時,Git會丢掉注釋行,用你輸入送出附帶資訊生成一次送出
git commit -m "version-6" #直接在指令行輸入說明資訊
[master 3687f51] version-6 #送出後輸出的資訊(master分支名稱,3687f51校驗和,version-6 注釋資訊)
1 file changed, 1 insertion(+), 1 deletion(-)
送出時記錄的是放在暫存區域的快照,任何還未暫存的仍然保持已修改狀态
每一次運作送出操作,都是對項目作一次快照,以後可以回到這個狀态,或者進行比較
跳過使用暫存區域
使用git commit -a時Git會自動把所有已經跟蹤過的檔案暫存起來一并送出,進而跳過git add步驟,但不會把未跟蹤的檔案暫存
移除檔案
git rm #從已跟蹤的檔案清單中删除,并連帶從工作目錄中删除指定的檔案
git rm指令後面可以列出檔案或者目錄的名字,也可以使用glob模式
如果使用shell指令rm删除檔案,需要再運作git rm記錄此次移除檔案的操作
如果删除之前修改過并且已添加到暫存區域,則必須-f強制删除,這是一種安全特性,用于防止誤删還沒有添加到快照的資料,這樣的資料不能被Git恢複
如果想把檔案從Git倉庫中删除,但仍然希望保留在目前工作目錄中。(想讓檔案保留在磁盤,但是并不想讓 Git 繼續跟蹤)
git rm --cached <file> #從git倉庫中删除檔案或目錄
例:
git rm --cached test.py
rm 'test.py'
git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: test.py
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.py #從git
ls
test.py
移動檔案或改名
git mv <file-from> <file-to>
git mv相當于下面三條指令的結合:
mv README.md README
git rm README.md
git add README
本文轉自 紅塵世間 51CTO部落格,原文連結:http://blog.51cto.com/hongchen99/1975991