GIT和repo命令速查參考
轉載一則:
Git命令快速參考
Git Command Quick Reference
本附錄為Git常見命令快速參考。每節介紹一種操作型別。
這裡會列出很多命令,而相應的解釋卻不多。對於還不熟悉Git的讀者,可回頭翻閱第1章“Git的版本控制之道”(第3頁)。
A.1安裝和初始化
Setup and Initialization
在使用Git之前,須要先進行配置。在使用一個新的版本庫之前,須要先初始化。本節介紹與Git設定和初始化相關的命令。
配置全域性使用者名稱和電子郵件地址
prompt> git config --global user.name "Your Name"
prompt>
為特定的版本庫配置使用者名稱和電子郵件地址
注意:你可以為每個版本庫單獨設定使用者名稱和郵件地址。這使得使用者可在不同專案中使用不同的使用者名稱和/或不同的郵件地址。
prompt> cd /path/to/repo
prompt> git config user.name "Your Name"
prompt> git config user.email [email protected]
在命令列中使用不同顏色顯示不同內容
prompt> git config --global color.ui "auto"
初始化新版本庫
prompt> mkdir /path/to/repo:
prompt> cd /path/to/repo
prompt> git init
Initialized empty Git repository in /path/to/repo/.git/
prompt>
... create file(s) for first commit ...
prompt> git add
prompt> git commit -m 'initial import'
Created initial commit bdebe5c: initial import.
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 <some file>
克隆版本庫
prompt> git clone <repository url
Initialize repo/.git
Initialized empty Git repository in /work/<remote repository>/.git/
將目錄中的內容納入Git版本控制
prompt> cd /path/to/existing/directory
prompt> git init
Initialized empty Git repository in /path/to/existing/directory/.git
prompt> git add .
prompt> git commit -m "initial import of some project"
在本地版本庫中設定遠端版本庫的別名
... from within the repository directory ...
prompt> git remote add <remote repository> <repository url>
A.2 日常操作
Normal Usage
本節列出Git日常操作命令,對應於第4章“新增與提交:Git基礎”(第41頁)。
新增新檔案或暫存已有檔案上的改動,然後提交
prompt> git add <some file>
prompt> git commit -m "<some message>"
暫存已有檔案上的部分修改
注意:[...]表示可選引數。
prompt> git add -p [<some file> [<some file> [and so on]]]"
選擇要提交的文字塊……
使用互動方式新增檔案
prompt> git add -i
暫存已納入Git版本控制之下的檔案的修改
prompt> git add -u [<some path> [<some path>]]
提交已納入Git版本控制之下的檔案的所有修改# s"
prompt> git commit -m "<some message>" -a;
清除工作目錄樹中的修改
prompt> git checkout HEAD <some file> [<some file>]
取消已暫存但尚未提交的修改的暫存標識
prompt> git reset HEAD <some file> [<some file>]
修復上一次提交中的問題
改動相關檔案,並暫存……
prompt> git commit -m "<some message>" --amend
修復上一次提交中的問題,並複用上次的提交註釋
prompt> git commit -C HEAD --amend
A.3 分支
Branches
分支是Git的強項之一。本節介紹關於分支的各個命令。詳細內容見第5章“理解和使用分支”(第55頁)。
列出本地分支
prompt> git branch
列出遠端分支
prompt> git branch -r
列出所有分支
prompt> git branch -a
基於當前分支(的末梢)建立新分支
prompt> git branch <new branch>
檢出另一條分支
prompt> git checkout <some branch>
基於當前分支建立新分支,同時檢出該分支
prompt> git checkout -b <new branch
基於另一個起點,建立新分支
你可以從版本庫中的任何一個版本開始建立新分支。這個起始點可以用一條已有的分支名稱、一個提交名稱,或者一個標籤名稱來表
prompt> git branch <new branch> <start point>
建立同名新分支,覆蓋已有分支
prompt> git branch -f <some existing branch> [<start point>]
移動或重新命名分支
只有當<new branch>不存在時
prompt> git checkout -m <existing branch name> <new branch name>
如果<new branch>已存在,就覆蓋它
prompt> git checkout -M <existing branch name> <new branch name>
把另一條分支合併到當前分支
prompt> git merge <some branch>
合併,但不提交
prompt> git merge --no-commit <some branch>
揀選合併,並且提交
prompt> git cherry-pick <commit name>
揀選合併,但不提交
prompt> git cherry-pick -n <commit name>
把一條分支上的內容壓合到另一條分支(上的一個提交)
prompt> git merge --squash <some branch>
刪除分支
僅當欲刪除的分支已合併到當前分支時
prompt> git branch -d <branch to delete>
不論欲刪除的分支是否已合併到當前分支
prompt> git branch -D <branch to delete>
A.4 歷史
History
這些命令用來顯示版本庫的歷史資訊,包括程式碼曾在哪裡、誰在何時做了什麼、修改的內容及其統計資訊。詳見第6章“查詢Git歷史記錄”(第71頁)。
顯示全部歷史記錄
prompt> git log
顯示版本歷史,以及版本間的內容差異
prompt> git log -p
只顯示最近一個提交
prompt> git log -1
顯示最近的20個提交,以及版本間的內容差異
prompt> git log -20 -p
顯示最近6小時的提交
prompt> git log --since="6 hours"
顯示兩天之前的提交
prompt> git log --before="2 days"
顯示比HEAD(當前檢出分支的末梢)早3個提交的那個提交
prompt> git log -1 HEAD
或者……
prompt> git log -1 HEAD
或者……
prompt> git log -1 HEAD
顯示兩個版本之間的提交
下面命令中的<start point>和<end point>可以是一個提交名稱、分支名稱、標籤名稱,或者它們的混合。
prompt> git log <start point>...<end point>
顯示歷史,每個提交顯示一行,包括提交註釋的第一行
prompt> git log --pretty=oneline
顯示改動行數統計
prompt> git log --stat
顯示改動檔案的名稱和狀態
prompt> git log --name-status
顯示當前工作目錄樹和暫存區間的差別
prompt> git diff
顯示暫存區和版本庫間的差別
prompt> git diff --cached
顯示工作目錄樹和版本庫間的差別
prompt> git diff HEAD
顯示工作目錄樹與版本庫中某次提交版本之間的差別
<start point>可以是一個提交名稱、分支名稱或標籤名稱。
prompt> git diff <start point>
顯示版本庫中兩個版本之間的差別
prompt> git diff <start point> <end point>
顯示差別的相關統計
prompt> git diff --stat <start point> [<end point>]
顯示檔案中各個部分的修改者及相關提交資訊
prompt> git blame <some file>
顯示檔案中各個部分的修改者及相關提交資訊,包括在該檔案中複製、貼上和移動內容等方面的情況。
prompt> git blame -M <some file>
顯示檔案中各部分的修改者及相關提交資訊,包括在檔案間移動內容方面的情況
prompt> git blame -C -C <some file>
顯示歷史時,顯示覆制和貼上資訊
prompt> git log -C -C -p -1 <some point>
A.5 遠端版本庫
Remote Repositories
開發人員之間通過遠端版本庫來共享工作成果,相互協作。本節介紹關於這些操作的命令,詳見第7章“與遠端版本庫協作”(第91頁)。
克隆遠端版本庫
prompt> git clone <some repository>
克隆遠端版本庫,但只下載其中最近200個提交的歷史記錄
prompt> git clone --depth 200 <some repository>
在本地版本庫中設定遠端版本庫的別名
prompt> git remote add <remote repository> <repository url>
顯示遠端分支
prompt> git branch -r
基於遠端分支建立本地分支
prompt> git branch <new branch> <remote branch>
基於遠端標籤建立本地分支
prompt> git branch <new branch> <remote tag>
從別名為“origin”的遠端版本庫中取來修改變化,但不合併到本地分支
prompt> git fetch
從任意的遠端版本庫中取來修改變化,但不合併到本地分支
prompt> git fetch <remote repository>
從任意的遠端版本庫中取來修改變化,併合併到當前檢出的本地分支
prompt> git pull <remote repository>
從別名為“origin”的遠端版本庫中取來修改變化,併合併到當前檢出的本地分支
prompt> git pull
把修改變化從本地分支推入遠端版本庫
prompt> git push <remote repository> <local branch>:<remote branch>
把修改變化從本地分支推入遠端版本庫中同名分支
prompt> git push <remote repository> <local branch>
把修改變化從本地新建分支推入遠端版本庫
prompt> git push <remote repository> <local branch>
把修改變化推入別名為“origin”的遠端版本庫
當遠端版本庫中已有同名分支時,這個命令會推入本地分支到遠端版本庫對應的分支中。如果遠端版本庫中尚無同名分支,則須使用git push <repository name> <local branch>。
prompt> git push
在遠端版本庫中刪除分支
prompt> git push <remote repository> :<remote branch>
在本地版本庫中刪除所有遠端版本庫中已不存在的分支
prompt> git remote prune <remote repository>
在本地版本庫中刪除某個遠端版本庫的簡稱,以及該遠端版本庫相關的分支
prompt> git remote rm <remote repository>
A.6 連線Git和SVN
Git to SVN Bridge
Git可以讀取Subversion版本庫中的資料,並把本地修改傳送回Subversion版本庫。這是Git區別於其他版本控制工具的必殺技之一。相關詳細介紹請參見第10章“遷移到Git”(第131頁)。
克隆SVN版本庫的全部內容
prompt> git svn clone <svn repository>
克隆具有標準結構的SVN版本庫
下面命令適用於克隆標準結構的SVN資料庫,也就是說,主幹命名為trunk,其他分支都存放於branches目錄下,標籤都存放於tags目錄下。
prompt> git svn clone -s <svn repository>
克隆非標準結構的SVN版本庫
prompt> git svn clone -T <trunk path> \
2 ]! W9 t7 X4 N) D; H# n( g4 I/ H
-b <branch path> \
+ q- e& |5 k& n$ C1 }1 e
-t <tag path> \
7 v. |9 `& `9 g, _* a
< svn repository>
克隆具有標準結構的SVN版本庫中的某個版本(比如第2321版)
prompt> git svn clone -s -r 2321
克隆具有標準結構的SVN版本庫,並對SVN中的分支新增字首
prompt> git svn clone -s --prefix svn/ <svn repository>
從上游SVN版本庫中獲得更新的內容,並依此在本地Git版本庫中變基本地分支
prompt> git svn rebase
把修改變化推回上游SVN版本庫
prompt> git svn dcommit
列出所有將推入上游SVN版本庫的提交
prompt> git svn dcommit -n
顯示SVN歷史記錄
prompt> git svn log
顯示檔案中各個部分的SVN的修改者及相關提交資訊
prompt> git svn blame <some file>
轉載二則:
1. 伺服器版本下載:
repo init -u [email protected]:i700t_60501010/platform/manifest.git -b froyo_almond -m M76XXTSNCJNLYA60501010.xml
repo sync
repo forall -c git checkout --track origin/i700t_60501010 -b [你的本地分支]
或者:
git clone [email protected]:6120_gingerbread/Arm9-6120.git
git checkout --track origin/arm9_6120 -b [你的本地分支名]
2. 伺服器新加倉庫同步:
請按如下步驟取得Lanucher_wpon的程式碼:
1:~> cd I700T/.repo/manifest
2: I700T/.repo/manifest> git pull --rebase
3: I700T/.repo/manifest> cd ../..
4: I700T> repo sync platform/packages/apps/Launcher_wpon
5:I700T> cd packages/apps/Launcher_wpon
6:I700T/packages/apps/Launcher_wpon>
7:git checkout --track origin/froyo_almond -b [你的本地分支]
3. 上傳本地修改到伺服器
repo forall -c git pull --rebase 和伺服器同步(要上傳程式碼前,一般先進行此操作)
git add . 或git add 檔名 添加當前倉庫修改的檔案
git commit -m "..." 在引號中新增你的修改記錄
git push origin 本地分支名:froyo_almond 上傳本地修改的程式碼
4. 設定一些預設的全域性變數,對所有工程程式碼有效
git config --global user.name yourmail
git config --global user.email yourmail
git config --global push.default tracking 這樣後續git push 後面不用帶引數
5.檢視修改記錄
git log 本地倉庫修改記錄
repo forall -c git log --since="2011-04-19" --until="2011-04-21" 按條件檢視工程所有倉庫修改記錄
repo status 檢視工程中所有倉庫的修改狀態(包括檔案位置)
git status 檢視倉庫修改狀態
6. 分支相關
git branch 檢視本地branch
git branch -r 檢視遠端branch
git branch -a 檢視所有branch
git branch -D (-d) (branch name) 刪除branch
cat .git/config 可以檢視本地branch一些資訊
7. 修改恢復相關
git checkout filename1 filename2 ... 取消本地修改,和伺服器同步
git stash
git stash apply 先stash本地修改,然後執行git pull --rebase同步,最後再APPLY恢復自己的修改
git reset --soft head_commit 恢復到最後一次commit,保持程式碼修改
git reset --hard commit 恢復到指定一次commit,放棄之前所有修改
#回退a.py這個檔案的版本到上一個版本
git reset HEAD^ a.py
git reset commitNO filename
8. 本地某倉庫出問題了,不好鬧騰時,刪除之,並重新同步跟蹤
project_folder/vendor/qcom$ rm -rf proprietary/ 進到相應目錄,刪除之
project_folde$ repo sync platform/vendor/qcom/proprietary 重新repo sync,後面路徑名稱可檢視:
gedit .repo/manifest.xml
git branch -a ----列舉所有BRANCH
git branch -D 700_arm11_server
git branch -D 700_arm11_server_wifi --刪掉所有本地branch
git checkout --track origin/froyo_almond -b 700_arm11_server 然後track遠端branch,重新建立本地分支
9.tag的使用
git tag [tag_name] [version],在對應版本上(一般用change的SHA1),建立tag
git tag -l 列出當前tag
git tag -d [tag_name] 刪除tag
有了tag以後,可以使用git checkout [tag_name] -b [branch_name]來檢出對應tag時刻的程式碼。也可以用tag name來實現diff等功能。
10. patch的使用
git diff filename1 filename2 ... 修改位置對比,檢視原始碼
git diff > xxx.patch 將修改的地方打成一個patch
git apply xxx.patch 將patch打上
11. 後續有用到的命令繼續新增
git revert 是撤銷某次提交。git reset –hard,才是退回到以前的版本
git reset --soft commitNum 儲存程式碼修改的reset,但這個時候無法使用git diff 進行比較修改的檔案,必須:
git reset filename filename 這樣就可以git diff檢視
git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9 b8e7b00c02b95b320f14b625663fdecf2d63e74c 檢視某兩個版本之間的差異
git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9:filename b8e7b00c02b95b320f14b625663fdecf2d63e74c:filename 檢視某兩個版本的某個檔案之間的差異
Git 命令別名
$ git config –global alias.co checkout // co將會成為checkout的別名
$ git config –global alias.br branch
$ git config –global alias.ci commit
$ git config –global alias.st status
$ git config –global user.name “username”
$ git config –global user.email [email protected]
轉載三則:
-
下載 repo 的地址: http://android.git.kernel.org/repo ,可以用 wgethttp://android.git.kernel.org/repo
或者 curl http://android.git.kernel.org/repo >~/bin/repo 來下載 repo , chmod a+x ~/bin/repo
- 用repo sync 在抓去 android source code 的時候,會經常出現一些錯誤導致 repo sync 中斷,每次都要手動開始。 可以用如下的命令,來自動重複: $?=1; while [ $? -ne 0 ] ; do repo sync ; done
- repo help [ command ] , 顯示command 的詳細的幫助資訊內容
- repo init -u URL , 在當前目錄安裝 repository ,會在當前目錄建立一個目錄 ".repo" -u 引數指定一個URL, 從這個URL 中取得repository 的 manifest 檔案。 repo init -u git://android.git.kernel.org/platform/manifest.git
可以用 -m 引數來選擇 repository 中的某一個特定的 manifest 檔案,如果不具體指定,那麼表示為預設的 namifest 檔案 (default.xml) repo init -u git://android.git.kernel.org/platform/manifest.git -m dalvik-plus.xml
可以用 -b 引數來指定某個manifest 分支。
repo init -u git://android.git.kernel.org/platform/manifest.git -b release-1.