第一部分 :提交修改
$git add . /*將當前目錄中所有改動的代碼添加到暫存區*/
$git commit -m "xxxxxx" /*將代碼提交到本地倉庫*/
$git push [remote-name] [branch-name]
# 推送數據到遠程倉庫
# PS:如果使用checkout --track 命令跟蹤了遠程分支,則可省略成git push
$git reset HEAD [filename]
#將不需要commit的文件移除緩存區
$git checkout --[file name]
# 將暫存區的特定文件替換成未更新的版本(即替換本地的修改)
# 使用git checkout . 可以恢復當前目錄下所有的文件到未修改版本
$git commit -am "xxxxx"
# 直接將所有本地修改提交到本地代碼倉庫(省略了git add 命令)
$git log
#查看當前的所有commit的版本信息
PS:git log --stat 可以查看詳細信息
$git pull [server-name] [branch-name]
#從服務器抓取代碼到本地分支
$git push [server-name] [branch-name]
#將本地分支的更改上傳到遠程分支
第二部分: 分支操作
查看branch情況:
$ git branch /*查看本地branch*/
$ git branch -a /*查看所有(本地和remote)branch*/
$ git branch -v /*查看本地branch的最後一次提交信息*/
新建branch:
$ git checkout --track <remote-name/branch-name> /*基於remote branch創建*/
$ git branch <branch-name> /*基於當前代碼創建*/
push branch到服務器:
$ git push remote-name branch-name /*新建的branch push以後纔會存在於server上*/
切換/檢出branch:
$ git checkout <branch-name>
刪除branch:
$ git branch –d <branch-name> /*刪除本地分支,不能刪除當前分支*/
分支的查看:
$git reflog /* 查看分支提交的所有歷史信息*/
分支的合併:
$ git merge <branch-name> /*合併branch 上的代碼到當前分支,也可以合併分支中的某個特定版本,(commit的狀態也會合並)*/
合併commit(非線性的好處):
$ git cherry-pick <commit-id > /*合併其他branch上的commit,但是隻合併其他分支上的修改,但是不合並commit的狀態*/
清除對tracked文件的修改:
$ git stash /*或者 $ git reset --hard */
清除un-tracked文件:
$ git clean –fdx
回退衝突的Merge(留到以後整合):
$ git pull
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard
查看分支的合併情況
$git branch --merged /* 查看已經合併到當前分支情況*/
$git branch --no-merged /*查看尚未合併到當前分支的分支有哪些*/
回退某個版本的commit(針對已經push的commit):
$ git revert <commit-id> /*回退commit-id版本的提交,會commit回退*/
$ git revert -n <commit-id> /*爲了驗證版本,回退修改後不commit*/
回退剛剛的commit(沒有push的commit,已經push的會有衝突,慎用! )
$ git reset --soft HEAD^ /*回退一個版本,只修改HEAD標記,不修改文件*/
$ git reset --soft HEAD~5 /*回退最近5次commit,修改HEAD標記,不修改文件*/
$ git reset --hard HEAD^/*回退一個版本,將文件和git object都修改到前一版*/
特殊的分支合併方式(Git rebase)
$git rebase [主分支][特性分支] /*將主幹分支的修改合併到特性分支中,而不保留特性分支的歷史版本*/
第三部分:其他命令
git diff:
$ git diff /*比較目錄文件和HEAD版本的差異(即查看修改內容)*/
$ git diff commit-id1..commit-id2 /*比較兩個版本*/
git tag:
$ git tag <tag-name> /*基於當前代碼創建名爲tag-name的tag*/
$ git tag /*顯示tag list*/
git mv:
$ git mv <src-path> <dst-path> /*重命名(移動)文件或目錄*/
git fetch:
$ git fetch <remote-name> /*從服務器remote-name下載,但不merge進當前branch,也不影響當前文件內容*/
$ git fetch –all /*從所有remote服務器下載文件*/
查看對android源代碼的修改:
$ repo status
更新android源代碼:
$ repo sync
Android代碼最近的修改:
$ repo forall -c git log --stat --after=‘date +%F --date=“-3 day”’ --all /*最近3天誰修改過android代碼*/
查看android代碼中包含的git project
$ repo list
第四部分:Git log 查看版本日誌
-p 按補丁格式顯示每個更新之間的差異。
--stat 顯示每次更新的文件修改統計信息。
--shortstat 只顯示 --stat 中最後的行數修改添加移除統計。
--name-only 僅在提交信息後顯示已修改的文件清單。
--name-status 顯示新增、修改、刪除的文件清單。
--abbrev-commit 僅顯示 SHA-1 的前幾個字符,而非所有的 40 個字符。
--relative-date 使用較短的相對時間顯示(比如,“2 weeks ago”)。
--graph 顯示 ASCII 圖形表示的分支合併歷史。
--pretty 使用其他格式顯示歷史提交信息。可用的選項包括 oneline,short,full,fuller 和 format(後跟指定格式)。
-(n) 僅顯示最近的 n 條提交
--since, --after 僅顯示指定時間之後的提交。
--until, --before 僅顯示指定時間之前的提交。
--author 僅顯示指定作者相關的提交。
--committer 僅顯示指定提交者相關的提交。
$ git log –p -2
-p 選項展開顯示每次提交的內容差異,用-2 則僅顯示最近的兩次更新
$ git log --stat
--stat,僅顯示簡要的增改行數統計
$ git log --pretty=oneline
--pretty 選項,可以指定使用完全不同於默認格式的方式展示提交歷史
oneline 將每個提交放在一行顯示,這在提交數很大時非常有用
$ git log --pretty=format:"%h - %an, %ar : %s"
選項 說明
%H 提交對象(commit)的完整哈希字串
%h 提交對象的簡短哈希字串
%T 樹對象(tree)的完整哈希字串
%t 樹對象的簡短哈希字串
%P 父對象(parent)的完整哈希字串
%p 父對象的簡短哈希字串
%an 作者(author)的名字
%ae 作者的電子郵件地址
%ad 作者修訂日期(可以用 -date= 選項定製格式)
%ar 作者修訂日期,按多久以前的方式顯示
%cn 提交者(committer)的名字
%ce 提交者的電子郵件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式顯示
%s 提交說明
$git log --author="chen.jian" --after="2013-10-01" --before="2013-10-10" --shortstat
查看"chen.jian"在2013-10-01 到 2013-10-10 時間段內的修改,並顯示摘要
第五部分:Git 與Svn 命令對比
Checkout
$ svn checkout <url>
$ git clone <url>
Update
$ svn update
$ git pull [remote-name] [branch-name]
Log
$ svn log
$ git log
Diff current modifications
$ svn diff [<path>]
$ git diff [<path>]
Commit
$ svn commit –m “message”
$ git commit –am “message”
Revert
$ svn revert <filename>
$ git checkout <filename>
Add
$ svn add <file or folder>
$ git add <file or folder>