天天看點

git與svn差別、Git基本指令git與svn差別Git基本指令

git與svn差別

1)git是分布式的,svn是集中式的

2)svn必須有一台中央伺服器,git不用

3)git使用可以不聯網,svn使用必須聯網

4)git友善分支之間的切換

5)git的完整性要優于svn

Git基本指令

0. 安裝Git

網上有很多Git安裝教程,如果需要圖形界面,windows下建議使用TortoiseGit,linux建議使用Git GUI或者GITK。

1. Git基本配置

git config可以配置git的參數,可以使用

git config --list

檢視已經配置的git參數。其中有三個級别的儲存位置,

--system

--global

--local

,分别表示所有使用者(本系統)、目前使用者(全局)、本地配置(目前目錄),預設使用

--local

配置使用者名及郵箱

在使用Git送出前,必須配置使用者名和郵箱,這些資訊會永久儲存到曆史記錄中。

git config --global user.name "Tocy"
git config --global user.email [email protected]
           

其他配置

如果在windows下建議還是配置下預設文本編輯器

core.editor

和差異分析工具

merge.tool

2. 建立Git倉庫

可以直接調用

git init

初始化目前目錄,即建立Git倉庫。

3. 獲得Git倉庫

如果需要克隆遠端倉庫,可以使用

git clone

,比如:

git clone https://git.oschina.net/Tocy/SampleCode.git
           

4. 送出更新

在windows下的Git GUI中,送出很簡單,右鍵-TortoiseGit-Commit。那麼指令行下需要怎麼處理?

Git中每個檔案都有三種狀态:committed、staged、modified。它們之間關系如下:

commit <-- stage <-- modify

commit --> --- --modify

我們擷取的Git倉庫中的所有檔案都是committed狀态,如果你在本地修改了檔案a,a的狀态就變成modified的;如果使用

git add a

,a的狀态變成staged;如果使用

git commit

,a的狀态就變成commited。這種狀态變化也說明複制代碼是很友善的,但是送出更新請慎重。

當然還有一種檔案狀态,未跟蹤狀态(unversioned/untracked),通過使用

git add

可以把未跟蹤狀态變更為staged;通過

git rm

可以将staged或者committed狀态變為未跟蹤狀态。

git status

通常送出前先檢查下修改了什麼内容,目前Git目錄下各檔案的狀态。

$ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        Readme.md

nothing added to commit but untracked files present (use "git add" to track)
           

git add

git add可以添加檔案或者目錄,也可以使用通配符。比如:

git add Readme.md    # add file only
git add *.cpp        # add all cpp files
git add /home/code/  # add all files in /home/code
           

git diff

git diff可以檢視目前目錄的所有修改。

送出之前,還是單獨确認下處于staged狀态的檔案有哪些,并保證修改正确。在實際應用中,可能還需要使用

git diff

導出PATCH做代碼走讀。

可以使用

git diff --staged

git diff --cached

檢視staged與上次送出快照之間的差別。

git commit

送出前需慎重。直接調用

git commit

會彈出編輯器,輸入送出日志(如果是多行日志,建議使用)。

針對單行日志送出的情況,可以使用如下指令:

git commit -m "add readme"

還有一種快捷的送出方式,直接跳過stage緩存區,直接送出目前目錄下的所有修改

git commit -a

(使用這個指令前建議确認下目前目錄的修改是否正确、必須)。

git rm

git rm會把檔案從目前目錄删除(不會儲存删除的檔案)。如果需要從Git倉庫中删除,但保留在目前工作目錄中,亦即從跟蹤清單中删除,可以使用

git rm --cached readme.md

5. 送出曆史檢視

可以使用

git log

檢視目前工程的所有送出的日志。

git log --stat      # 僅顯示摘要選項
git log --pretty=oneline        # 定制記錄格式
git log --graph     # 圖像化分支和版本更新
           

6. 撤銷更新

7. 遠端倉庫

可以使用

git remote

檢視目前的遠端庫。

git remote -v

可以顯示對應的克隆位址。(對于多個遠端倉庫很有用)

添加遠端倉庫

git remote add [short_name] [url]

可以添加新的遠端倉庫。

從遠端倉庫抓取資料

git fetch [remote-name]

可以從遠端倉庫抓取資料到本地。

也可以使用

git pull

推送資料到遠端倉庫

git push [remote_name] [branch_name]

預設使用origin和master。

檢視遠端倉庫資訊

git remote show origin

遠端倉庫的删除和重命名

git remote rename [old_name] [new_name]

git remote rm [remote_name]

8. 打Tags

可使用

git tag

顯示目前庫中的标簽。

添加标簽(含附注)

git tag -a v0.1 -m "my version 0.1"

使用如下指令檢視Tag日志資訊(指定對應标簽的名字)

git show v0.1

也可使用SHA-1的送出表示建立tag:

git tag -a v0.2 [SHA-1] -m "my version 0.2"

分享标簽

預設的,git push不會推送标簽資訊到遠端倉庫,需要通過指令顯式推送。

git push origin v0.1

如果需要推送所有标簽,使用

git push origin --tags

9. Git分支

git分支是輕量級的,速度很快,僅記錄索引資訊。

顯示所有分支

使用

git branch

可顯示目前所有分支。

可以使用--merged和--no-merged檢視已經合并、未合并的分支。

建立及切換分支

可以使用下面指令直接切換并建立分支

git checkout -b testing

等價于

$ git branch testing    # 建立testing 分支
$ git checkout testing  # 切換到testing分支
           

注意切換分支時請保持工作目錄沒有未送出的修改。Git鼓勵使用分支,處理完問題之後合并分支即可。

分支合并

将hotfix分支合并到master(主分支)上,需要通過下面指令:

$ git checkout master
$ git merge hotfix
           

合并之後可以使用

git branch -d hotfix

删除分支。

如果合并時存在沖突,需要手工修改。

繼續閱讀