1. 程式人生 > 實用技巧 >Git -- 版本控制之道

Git -- 版本控制之道

圖片來源於網路


學習筆記 --- 《版本控制之道:使用Git》

安裝和初始化

在使用Git之前,須要先進行配置。在使用一個新的版本庫之前,須要先初始化。

配置全域性使用者名稱和電子郵件地址
git config --global[user.name](http://user.name) "Your Name"
git config --global user.email "Your Email"
為特定的版本庫配置使用者名稱和電子郵件地址
cd /path/to/repo
git config[user.name](http://user.name) "your name"
git config user.email "your email"
在命令列中使用不同顏色顯示不同內容
git config --global color.ui "auto"
初始化版本庫
mkdir myrepo
cd myrepo
git init

日常操作

新增新檔案 或 暫存已有檔案上的改動,然後提交
git add <some file>
git commit -m "<some message>"
暫存已有檔案上的部分修改
git add -p [<some file> [ <some file> [ and so on ] ] ]
使用互動方式新增檔案
git add -i
暫存已納入Git版本控制之下的檔案的修改
git add -u [<some path> [<some path>]
提交已納入Git版本控制之下的檔案的所有修改
git commit -m "<some message>" -a
清除工作目錄樹中的修改
git checkout HEAD <some file> [<some file>]
取消已暫存但尚未提交的修改的暫存標識
git reset HEAD <some file> [<some file>]
修復上一次提交中的問題
改動相關檔案,並暫存……
git commit -m "<some message>" --amend
修復上一次提交中的問題,並複用上次的提交註釋
git commit -C HEAD --amend

分支

分支是Git的強項之一。

列出本地分支
git branch
列出遠端分支
git branch -r
列出所有分支
git branch -a
基於當前分支(的末梢)建立新分支
git branch <new branch>
檢出另一條分支
git checkout <some branch>
基於當前分支建立新分支,同時檢出該分支
git checkout -b <new branch>
基於另一個起點,建立新分支

你可以從版本庫中的任何一個版本開始建立新分支。這個起始點可以用一條已有的分支名稱、一個提交名稱,或者一個標籤名稱來表達。

git branch <new branch> <start point>
建立同名新分支,覆蓋已有分支
git branch -f <some existing branch> [<start point>]
移動或重新命名分支
只有當 <new branch> 不存在的
git branch checkout -m <existing branch name> <new branch name>
如果 <new branch> 已存在,就覆蓋它
git checkout -M <existing branch name> <new branch name>
把另一條分支合併到當前分支
git merge <some branch>
合併,但不提交
git merge --no-commit <some branch>
揀選分支,並且提交
git cherry-pick <commit name>
揀選分支,但不提交
git cherry-pick -n <commit name>
把一條分支上的內容壓合到另一條分支(上的一個提交)
git merge --squash <some branch>
刪除分支
僅當欲刪除的分支已合併到當前分支時
git branch -d <branch to delete>

不論欲刪除的分支是否已經合併到當前分支
git branch -D <branch to delete>

歷史

這些命令用來顯示版本庫的歷史資訊,包括程式碼曾在哪裡、誰在何時做了什麼、修改的內容及其統計資訊。

顯示全部歷史記錄
git log
顯示版本歷史,以及版本間的內容差異
git log -p
只顯示最近一個提交
git log -l
顯示最近的20個提交,以及版本間的內容差異
git log -20 -p
顯示最近6小時的提交
git log --since = "6 hours"
顯示兩天之前的提交
git log --before = "2 days"
顯示比HEAD(當前檢出分支的末梢)早3個提交的那個分支
git log -l HEAD~3
git log -l HEAD^^^
git log -l HEAD~1^^
顯示兩個版本之間的提交

下面命令中的可以是一個提交名稱、分支名稱、標籤名稱,或者它們的混合。

git log <start point>...<end point>
顯示歷史,每個提交顯示一行,包括提交註釋的第一行
git log --pretty=oneline
顯示改動行數統計
git log --stat
顯示改動檔案的名稱和狀態
git log --name-status
顯示當前工作目錄樹和暫存區間的差別
git diff
顯示暫存區和版本庫間的差別
git diff --cached
顯示工作目錄樹和版本庫間的差別
git diff HEAD
顯示工作目錄樹與版本庫中某次提交版本之間的差別
<start point> 可以是一個提交名稱、分支名稱或標籤名稱
git diff <start point>
顯示版本庫中兩個版本之間的差別
git diff <start point> <end point>
顯示差別的相關統計
git diff --stat <start point> [<end point>]
顯示檔案中各個部分的修改者及相關提交資訊
git blame <some file>
顯示檔案中各個部分的修改者及相關提交資訊,包括在該檔案中複製、貼上和移動內容等方面的情況
git blame -M <some file>
顯示檔案中各部分的修改者及相關提交資訊,包括在檔案間移動內容方面的情況
git blame -C -C <some file>
顯示歷史時,顯示覆制和貼上資訊
git log -C -C -p -l <some point>

遠端版本庫

開發人員之間通過遠端版本庫來共享工作成果,相互合作。

克隆遠端版本庫
git clone <some repository>
克隆遠端版本庫,但只下載其中最近200個提交的歷史記錄
git clone --depth 200 <some repository>
在本地版本庫中設定遠端版本庫的別名
git remote add <remote repository> <repository url>
顯示遠端分支
git branch -r
基於遠端分支建立本地分支
git branch <new branch> <remote branch>
基於遠端標籤建立本地分支
git branch <new branch> <remote tag>
從別名為“origin”的遠端版本庫中取來修改變化,但不合併到本地分支
git fetch
從任意的遠端版本庫中取來修改變化,但不合併到本地分支
git fetch <remote repository>
從任意的遠端版本庫中取來修改變化,合併到當前檢出的本地分支
git pull <remote repository>
從別名“origin”的遠端版本庫中取來修改變化,合併到當前檢出的本地分支
git pull

把修改變化從本地分支推入遠端版本庫
git push <remote repository> <local branch> : <remote branch>
把修改變化從本地分支推入遠端版本庫中同名分支
git push <remote repository> <local branch>
把修改變化從本地新建分支推入遠端版本庫
git push <remote repository> <local branch>
把修改變化推入別名為“origin”的遠端版本庫

當遠端版本庫中已有同名分支時,這個命令會推入本地分支到遠端版本庫對應的分支中。如果遠端版本庫中尚無同名分支,則須用git push

git push
在遠端版本庫中刪除分支
git push <remote repository > : <remote branch>
在本地版本庫中刪除所有遠端版本庫中已不存在的分支
git remote prune <remote repository>
在本地版本庫中刪除某個遠端版本庫的簡稱,以及該遠端版本庫相關的分支
git remote rm <remote repository>

連線 Git 和 SVN

Git可以讀取Subversion版本庫中的資料,並把本地修改傳送回Subversion版本庫。這是Git區別於其他版本控制工具的必殺技之一。

克隆SVN版本庫的全部內容
git svn clone <svn repository>
克隆具有標準結構的SVN版本庫
git svn clone -s <svn repository>
克隆非標準結構的SVN版本庫
git svn clone -T <trunk path> \
-b <branch path> \
-t <tag path> \
<svn repository>
克隆具有標準結構的SVN版本庫中的某個版本(比如第2321版)
git svn clone -s -r 2321
克隆具有標準結構的SVN版本庫,並對SVN中的分支新增字首
git svn clone -s --prefix svn/ <svn repository>
從上游SVN版本庫中獲得更新的內容,並依次在本地Git版本庫中變基本地分支
git svn rebase
把修改變化推回上游SVN版本庫
git svn dcommit
列出所有將推入上游SVN版本庫的提交
git svn dcommit -n
顯示SVN歷史記錄
git svn log
顯示檔案中各個部分的SVN的修改者及相關提交資訊
git svn blame <some file>