git 命令集
-------------------------------------------------------------------------------
配置
-------------------------------------------------------------------------------
git config --global user.name "Karl Ma" 配置用戶名
git config --global user.email [email protected] 配置用戶mail
git config --global core.editor emacs 配置編輯器
git config --global merge.tool vimdiff 配置差異分析工具
git config --list 顯示配置項
git config user.name 顯示特定的配置項
以下是設置命令的別名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
-------------------------------------------------------------------------------
幫助
-------------------------------------------------------------------------------
git help
git help tag
git tag --help
-------------------------------------------------------------------------------
基本命令
-------------------------------------------------------------------------------
git init 要對現有的某個項目開始用 Git 管理,需到此項目所在的目錄執行此命令
git init --bare --shared 在一個空目錄下執行可以創建一個純倉庫, --shared 選項,Git 會自動對該倉庫加入可寫的組
git add *.c 跟蹤新文件,將*.c的文件們增加到暫存區
gti commit 將暫存區的文件提交,會啓動編輯工具
git commit -m 'some' 將暫存區的文件提交
git commit -a -m 'some' 自動把所有已經跟蹤過的文件暫存起來一併提交,跳過git add步驟,沒有跟蹤的文件不會提交,也不增加
git commit --amend 重新提交,與上一次提交合併成一次提交
git clone git://github.com/schacon/grit.git 從遠程服務器上clone一份,ssh協議的格式爲user@server:/path.git
git clone git://github.com/schacon/grit.git mygrit 從遠程服務器上clone一份到本地的mygrit目錄
git clone file:///d:/myproject/test.git 本地協議clone
git clone /d/myprojects/test.git 本地協議lcone
git clone ssh://user@host:project.git 使用ssh協議
git clone user@host:project.git 同上,省略寫法
git clone --bare my_project my_project.git 把一個倉庫克隆爲純倉庫
git status 檢查當前文件狀態
git add <file> 暫存已修改文件
git rm <file> 移除跟蹤的文件,同時刪除本地文件
git rm -f <file> 如果文件已經修改過並放到了暫存區,需要強制移除
git rm --cached <file> 不刪除本地文件,只從跟蹤清單中移除
git rm /*~ 移除所有以~結尾的文件,從當前目前遞歸執行。/表示需要git來解釋*而不是用shell來解釋*,如果用shell來解決*的話,就不會有遞歸啦
git mv file_from file_to 移動文件,這裏相當於改名,相當於執行了三條命令:(不論用哪種方式,git都會知道是改名啦)
$ mv README.txt README
$ git rm README.txt
$ git add README
git log 查看提交歷史日誌
git log -p 顯示每次提交的差異
git log -p -2 只顯示最近兩次的提交日誌,當然顯示其差異
git log --stat 僅顯示簡要的增改行數統計
git log --pretty=oneline 每一個日誌只顯示在一行
git log --pretty=format:"%h - %an, %ar : %s" 以特定的格式顯示
git log --graph 顯示樹形圖
在項目目錄下編輯.gitignore文件,忽略文件的模式
# 此爲註釋 – 將被 Git 忽略
*.a # 忽略所有 .a 結尾的文件
!lib.a # 但 lib.a 除外
/TODO # 僅僅忽略項目根目錄下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目錄下的所有文件
doc/*.txt # 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
git diff 比較工作目錄中的文件與暫存區的文件的差異
git diff --cached 已經暫存起來的文件和上次提交時的快照之間的差異
git diff --staged 效果同上,1.6.1以上的git支持
gitk GUI界面
git reset HEAD benchmarks.rb 取消先前放到暫存區中的文件
git checkout -- benchmarks.rb 取消工作目錄中文件的修改,恢復到修改前的版本
git remote 查看當前的遠程庫
git remote -v 查看當前的遠程庫,並顯示對應的clone地址
git remote add pb git://github.com/paulboone/ticgit.git 添加一個遠程庫
git fetch pb 從遠程倉庫pb中抓取數據
git pull 從原始克隆的遠端倉庫中抓取數據後,合併到工作目錄中當前分支
git push origin master 推送數據到遠程倉庫origin的master分支
git remote show origin 顯示遠程倉庫origin的信息
git remote rename pb paul 將遠程倉庫pb重命名爲paul
git remote rm paul 刪除遠程倉庫paul
git tag 列顯已有的標籤
git tag -l 'v1.4.2.*' 列顯以v1.4.2.開頭標籤
git tag -a v1.4 -m 'my version 1.4' 創建一個含附註類型的標籤
git show v1.4 查看相應標籤的版本信息,並連同顯示打標籤時的提交對象
git tag -s v1.5 -m 'my signed 1.5 tag' 簽署標籤
git tag -v v1.4.2.1 驗證簽署的標籤
git tag v1.4-lw 輕量級標籤
git tag -a v1.2 9fceb02 將校驗和以9fceb02的一次提交打上v1.2的標籤,需要先用git log --pretty=oneline命令看一下每次提交的校驗和
git push origin v1.5 將v1.5的標籤推送到遠程倉庫origin
git push origin --tags 將所有標籤推送到遠程倉庫origin
-------------------------------------------------------------------------------
分支與合併
-------------------------------------------------------------------------------
git branch testing 創建一個testing分支
git checkout testing 將工作目錄轉換到testing分支上
git checkout -b testing 相當於上兩條命令一起執行
git merge hotfix 將當前所在的分支(如master)合併到hotfix分支上,合併後hotfix和master會指向同一個快照
git branch -d hotfix 刪除hotfix分支
git branch -D hotfix 強制刪除hotfix分支,如果hotfix分支沒有與當前分支合併過,用-d刪除會返回錯誤,可以用-D強制刪除
git status 可以查看哪些合併合併時發生了突出
git mergetool 調用一個可視化的合併工具,//在我的機器上會調用TortoiseMerge,我安裝了TortoiseSVN
git add <file> 將修改完的(解決衝突的文件放到暫存區)
git commit -a -m 'some gugu' 直接將修改後的(解決了衝突的文件提交)
git branch 顯示所有的分支,顯示時前面有*那個分支爲工作目錄所在的分支
git branch -v 顯示分支的同時,顯示分支的最後一次信息
git branch --merged 查看哪些分支已被併入當前分支,刪除這些分支(非當前分支不會損失什麼)
git branch --no-merged 查看哪些分支沒有併入當前分支,刪除這些分支會損失
git push origin serverfix 取出我的 serverfix 本地分支,推送它來更新遠程倉庫origin的 serverfix 分支
git push origin myserverfix:serverfix 取出我的myserverfix 本地分支,推送它來更新遠程倉庫origin的 serverfix 分支
git merge origin/serverfix 如果要把origin倉庫的serverfix內容合併到當前分支
git checkout -b serverfix origin/serverfix 從origin倉庫的serverfix分支創建一個本地的serverfix分支
git checkout --track origin/serverfix 結果同上一條一樣,1.6.2版本以上的git支持
git push [遠程名] :[分支名] 刪除一個遠程分支
git push origin :serverfix 刪除遠程分支serverfix
git rebase master 將當前分支衍合到master分支
git rebase --onto master server client 相當於檢出 client 分支,找出 client 分支和 server 分支的共同祖先之後的變化,然後把它們在 master 上重演一遍
git rebase master server 當前分支在master,這個命令相當於先轉到server分支,再執行git rebase master