一、Git的配置
/etc/gitconfig 文件:系統中對所有用戶都普遍適用的配置。若使用 git config 時用 --system 選項,讀寫的就是這個文件。
~/.gitconfig 文件:用戶目錄下的配置文件只適用於該用戶。若使用 git config 時用 --global 選項,讀寫的就是這個文件。
當前項目的 Git 目錄中的配置文件(也就是工作目錄中的 .git/config 文件):這裏的配置僅僅針對當前項目有效。每一個級別的配置都會覆蓋上層的相同配置,所.git/config 裏的配置會覆蓋 /etc/gitconfig 中的同名變量。
1、設置用戶信息
$ git config --globaluser.name “fatedier”$ git config --global user.email [email protected]
$ git config --global core.editor vim
2、設置差異分析工具
$ git config --global merge.tool vimdiff
3、如何獲取幫助文檔
$ git help<verb>
$ git <verb> --help$ man git-<verb>
例如man git-config
二、Git基礎操作
1、取得Git倉庫(從現有倉庫克隆)
$ git clone https://github.com/schacon/fatest.git
這個命令會在當前目錄下創建一個fatest的目錄,其中的.git目錄保存所有的版本記錄。fatest下是項目的所有文件。
如果要自定義目錄名稱,可以在末尾指定,例如:
$ git clone https://github.com/schacon/fatest.gitfatestnew
現在創建的目錄就是fatestnew而不是fatest了,其他的都一樣。
2、檢查當前項目文件狀態
$ git status
可以看到有哪些文件是沒有加入到版本中的,哪些是修改了還沒提交的等等。
3、將新文件加入到版本中
注:git add命令對於不同狀態的文件有不同的效果,可以用它開始跟蹤新文件,或者把已跟蹤的文件放到暫存區,還能用於合併時把有衝突的文件標記爲已解決狀態等。
注意修改過後的文件處於未暫存狀態,提交的時候處於未暫存狀態的文件將不會提交,需要使用git add命令更改爲暫存狀態,之後再提交就會提交到倉庫中了。
4、忽略某些文件
對於不需要加入到版本中,並且使用git status時不再提示的文件。
在.gitignore文件中進行配置
例如*.exe
那麼所有的以.exe結尾的文件都會被忽略,而不再提醒。
例子:
# 此爲註釋– 將被 Git 忽略
# 忽略所有 .a 結尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 僅僅忽略項目根目錄下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目錄下的所有文件
build/
# 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# ignore all .txt files in the doc/ directory
doc/**/*.txt
5、查看已暫存和未暫存的更新文件差異
未暫存:
$ git diff
已暫存:
$ git diff --staged
6、提交更新
$ git commit
之後進入vim編輯提交說明,保存即可。
$ git commit --m “comment”
使用-m命令可以直接在一行命令中寫說明。
$ git commit -a
使用-a命令,會把未暫存和已暫存的文件一起提交,不然只會提交已暫存的文件。
7、刪除文件和取消跟蹤
可以先本地使用rm命令刪掉,這時候放在未暫存區域,之後用“git rm文件名”刪掉。
也可以直接使用“git rm 文件名”刪掉。
另外一種情況是,我們想把文件從 Git 倉庫中刪除(亦即從暫存區域移除),但仍然希望保留在當前工作目錄中。換句話說,僅是從跟蹤清單中刪除。比如一些大型日誌文件或者一堆 .a 編譯文件,不小心納入倉庫後,要移除跟蹤但不刪除文件,以便稍後在 .gitignore 文件中補上,用 --cached 選項即可:
$ git rm --cached readme.txt
8、移動文件
例如要把test.cpp改爲tt.cpp
$ git mv test.cpp tt.cpp
就相當於是
$ mv README.txt README
$ git rm README.txt
$ git add README
9、查看提交歷史
$ git log
10、撤銷操作
(1)覆蓋上一次的提交
$ git commit --amend
會將上次提交和這次提交合並起來,算作一次提交。
(2)取消已暫存文件
$ git reset HEAD <file>
這個時候文件狀態就從已暫存變爲未暫存
(3)取消對文件的修改(還沒有放到暫存區)
$ git checkout -- <file>
11、運程倉庫的使用
(1)查看當前的遠程庫
$ git remote
會列出每個遠程庫的簡短的名字,默認使用origin表示原始倉庫
$ git remote -v
會額外列出遠程庫對應的克隆地址
(2)添加遠程倉庫
$ git remote add [shortname] [url]
(3)從遠程倉庫抓取數據
$ git fetch [remote-name]
抓取數據,但並不合併到當前分支
$ git pull
自動抓取數據,並自動合併到當前分支
$ git branch -r
查看所有遠程分支
$ git checkout -b test origin/test
獲取遠程分支到本地新的分支上,並切換到新分支
(4)推送數據到遠程倉庫
$ git push [remote-name] [branch-name]
推送操作會默認使用origin和master名字
(5)查看遠程倉庫信息
$ git remote show [remote-name]
除了對應的克隆地址外,它還給出了許多額外的信息。它友善地告訴你如果是在 master 分支,就可以用 git pull 命令抓取數據合併到本地。另外還列出了所有處於跟蹤狀態中的遠端分支。
(6)遠程倉庫的刪除
$ git remote rm [remote-name]
12、標籤的使用
(1)顯示已有的標籤
$ git tag
(2)新建標籤
$ git tag v1.0
新建一個簡單的標籤
$ git tag -a v1.0 -m ‘my version 1.0’
-m指定了對應標籤的說明
(3)後期加註標籤
$ git log --pretty=oneline --abbrev-commit
先顯示提交歷史
$ git tag -a v1.1 9fceb02
補加標籤
(4)推送標籤
$ git push origin [tagname]
13、設置命令別名
$ git config --global alias.co checkout
三、Git分支
1、新建分支
$ git branch testing
會在當前commit對象上新建一個分支指針
注:HEAD這個特別的指針是指向正在工作中的本地分支的指針
2、切換分支
$ git checkout testing
切換到testing分支上
3、分支的合併
在master分支上,執行:
$ git merge testing
將tesing分支合併回master
4、使用合併工具(可以自己設置,例如設置成vimdiff)
$ git mergetool
5、分支的管理
$ git branch --merged
查看哪些分支已經被併入當前分支,通常這些都可以刪除了。
$ git branch -d testing
刪除一個分支
$ git branch -D testing
如果該分支尚沒有合併,可以使用-D選項強制刪除。
6、推送本地分支
$ git push origin testing
7、分支的衍合
例如現在有兩個分支,一個master,一個testing
$ git checkout testing
$ git rebase master
$ git checkout master
$ git merge testing
通常在貢獻自己的代碼之前先衍合,再提交,會讓歷史提交記錄更清晰。
四、Git調試
1、文件標註
$ git blame -L 12,22 test.cpp
查看test.cpp文件對每一行進行修改的最近一次提交。
2、查看文件的歷史提交
$ git log --pretty=oneline test.cpp
查看test.cpp文件的歷史提交記錄
3、查看文件的歷史版本
$ git show [commit] [file]
例如:$ git show 7da7c23 test.cpp
查看7da7c23這次提交的test.cpp文件。