配置
-
$ git config --global user.name "John Doe"
-
$ git config --global user.email [email protected]
創建版本庫
-
$ git clone [url] #克隆遠程版本庫
-
$ git clone git://github.com/schacon/grit.git
-
$ git clone git://github.com/schacon/grit.git mygrit
-
$ git clone --bare my_project my_project.git #創建純倉庫
-
$ git init #初始化本地版本庫
-
$ git init --bare #創建純倉庫
修改和提交
-
$ git status #查看狀態
-
$ git diff #查看變更內容
-
$ git diff --cached #查看已經暫存起來的文件和上次提交時的快照之間的差異
-
$ git diff master...contrib #特性分支contrib和它同master分支的共同祖先之間的差異(合並時實際將要引入的新代碼)
-
$ git add . #跟蹤所有改動過的文件
-
$ git add [file] #跟蹤指定的文件
-
$ git mv [old] [new] #文件改名
-
$ git rm [file] #刪除文件
-
$ git rm --cached [file] #停止跟蹤文件但不刪除
-
$ git commit -m "commit message" #提交所有更新過的文件
-
$ git commit --amend #修改最後一次提交
-
$ git commit -a -m 'added new benchmarks' #跳過暫存區域直接提交
查看提交歷史
-
$ git log #查看提交歷史
-
$ git log --pretty=oneline
-
$ git log -p [file] #查看指定文件的提交歷史
-
$ git log master..experiemnt #所有可從experiment分支中獲得而不能從master分支中獲得的提交
-
$ git blame [file] #以列表方式查看指定文件的提交歷史
-
$ git log origin/featureA ^featureA #比較origin/featureA及featureA分支,查看origin/featureA更新了哪些內容
撤消
-
$ git reset --hard HEAD #撤消工作目錄中所有未提交文件的修改內容
-
$ git reset --hard [commit] #會退到某個[commit]
-
$ git reset HEAD [file] #取消已經暫存的文件
-
$ git checkout HEAD [file] #撤消指定的未提交文件的修改內容[已暫存]
-
$ git checkout -- benchmarks.rb #取消對文件的修改[未暫存]
-
$ git revert [commit] #撤消指定的提交
分支與標簽
-
$ git branch #顯示所有本地分支
-
$ git checkout [branch/tag] #切換到指定分支或標簽
-
$ git checkout -b featureB origin/master #從分支origin/master克隆並創建分支featureB,切換至featureB
-
$ git branch [new-branch] #創建新分支
-
$ git branch sc/ruby_client master #從master分支克隆一個sc/ruby_client分支
-
$ git branch -d [branch] #刪除本地分支
-
$ git branch --merged #查看哪些分支已被並入當前分支
-
$ git branch --no-merged #查看哪些分支未被並入當前分支
-
$ git tag #列出所有本地標簽
-
$ git tag [tagname] #基於最新提交創建標簽
-
$ git tag -d [tagname] #刪除標簽
合並與衍合
-
$ git merge [branch] #合並指定分支到當前分支
-
$ git rebase [branch] #衍合指定分支到當前分支
遠程操作
-
$ git remote -v #查看遠程版本庫信息
-
$ git remote show [remote] #查看指定遠程版本庫信息
-
$ git remote add [remote] [url] #添加遠程版本庫
-
$ git remote rename [old-remote-name] [new-remote-name] #遠程倉庫的重命名
-
$ git remote rm [remote] #遠程倉庫的刪除
-
$ git fetch [remote] #從遠程庫獲取代碼
-
$ git pull [remote] [branch] #下載代碼及快速合並至當前分支
-
$ git push [remote] [branch] #上傳代碼及快速合並
-
$ git push origin featureB[本地分支]:featureBee[遠程分支] #推送本地分支至指定的遠程分支
-
$ git push [remote] :[branch/tag-name] #刪除遠程分支或標簽
-
$ git push --tags #上傳所有標簽
其他
-
$ git describe master #生成內部版本號
-
$ git archive master --prefix='project/' | gzip > 'git describe master'.tar.gz #打包成tar
-
$ git archive master --prefix='project/' --format=zip > 'git describe master'.zip #打包成zip
-
$ git stash #儲藏
-
$ git stash list #查看儲藏列表
-
$ git stash apply stash@2 #應用名為stash@2 的儲藏。如果你不指明,Git 默認使用最近的儲藏並嘗試應用它
-
$ git stash drop stash@{0} #移除名為stash@{0}的儲藏
-
$ git blame -L 12,22 simplegit.rb #文件標注
Git文件
.doc diff=word
database.xml merge=ours
# 此為注釋– 將被Git忽略
*.[oa] # 忽略所有.o或.a結尾的文件
!lib.a # 但lib.a 除外
/TODO # 僅僅忽略項目根目錄下的TODO文件,不包括subdir/TODO
build/ # 忽略build/目錄下的所有文件
doc/*.txt # 會忽略doc/notes.txt但不包括doc/server/arch.txt