Git 常用命令

2021-06-20 05:56:06 字數 4262 閱讀 3349

git和svn,cvs一樣,是一種源**管理系統。和後兩者不同的是,它不僅可以集中式管理,也可以以分布式的形式工作,即所有操作都在本地,速度快,且本地提交不會影響共享的**倉庫。git功能很多,本文列了一些常見用法。

配置和建立**倉庫

設定提交時的編輯器(預設是nano):

$ export git_editor=vim  

或者$ git config --global core.editor vim

設定檔案比較工具:

$ git config --global merge.tool vimdiff

$ git config --global diff.tool vimdiff

$ git config --global difftool.prompt no

忽略檔案許可權:

$ git config core.filemode false

配置個人資訊,即提交時顯示的作者資訊,如:

$ git config user.name "jzj"

$ git config user.email "

jzj@domain

"這些git config命令其實是寫到~/.gitconfig這個配置檔案中,直接寫這個檔案效果是一樣的,比如要使git命令的輸出有高亮,則在.gitconfig中加

[color]

ui = auto

建立乙個新git倉庫:

$ git init

查詢資訊(inquiry)

這部分和svn中對應命令很像

檢視配置資訊:

$ git config --list

檢視倉庫的狀態資訊:

$ git status

檢視兩個版本的差異

$ git diff 

由於git中引入了index的概念,因此和svn相比,git diff可分為加--cached和不加兩種:

$ git diff  # 顯示本地改動但沒有stage的改動

$ git diff --cached # 顯示已經stage過的本地改動,也就是如果執行git commit會提交的改動

$ git diff master..test # 兩個branch間的差別

$ git diff --stat  # 顯示統計資訊

歷史資訊

$ git log

$ git log -p # 顯示patch

$ git log --stat  # 行數統計

$ git log --topo-order --graph # 用簡單圖形顯示commit間的拓撲關係

$ git log -n # 僅列出前n個

$ git show-branch  --more=n # 前n個提交歷史資訊

檢視更改內容

$ git show # 檢視指定commit的改動

另外,對工作目錄中檔案操作有git ls-files,git grep等命令。

提交(commit)

和svn不同的是,git中的checkin分兩步,即stage和commit。如:

$ git add a.c  # stage改動,更改index(index是乙個臨時動態檔案,描述了整個工程目錄,並記錄了作了哪些改動)。stage過的改動會在git diff --cached中顯示出來。

$ git commit -m "comments" # 提交改動

加-a引數可以將前面兩步合二為一:

$ git commit -a

但它僅限於tracked的檔案。比如新建乙個檔案但沒有git add過,它還是untracked狀態,那加-a也沒用。

$ patc -p1 < diff.patch

當然這更像svn中的習慣,在git裡反正是本地提交,提交的成本很低,所以可以先提交再生成patch。

branch之間打patch用:

$ git cherry-pick

撤消(undo)

和撤消相關的有三個命令:git checkout, git revert和git reset。

如取消本地沒有stage過的改動(即沒有通過git add等命令記錄到index中的改動):

$ git checkout . # index不變,工作目錄改變

再如$ git checkout head^  # 返檔到前一次commit的版本

$ git checkout # 返檔到指定commit版本

git reset 不僅作用於工作目錄,而且作用於index檔案。git reset有三種方式,分別為soft, hard和mixed方式。

$ git reset --soft # 既不影響index也不影響工作目錄,也就是說用git diff --cached還是可以看到撤消的改動

$ git reset --mixed # index改變,但工作目錄不變

$ git reset --hard ,# 將index和工作目錄都恢復到指定版本。相當於svn revert -r *

撤消後,git log無法看到撤消的commit歷史,但可以用下面命令看到:

$ git reflog

git checkout和git reset --hard的區別在於:

git checkout .  # 清除本地更改,但不清除index。舉例來說,之前git add但沒commit的作用還在。

git reset --hard head  # 清除本地更改,包括index。所以git add過的也清除了。

git revert 進行一次與指定版本相反的commit。如:

$ git revert # commit一次和指定commit相反的改動

$ git revert -n # 和前一命令一樣,但不提交

git revert可以把中間的commit作用消除,且git revert不會改變已有的歷史記錄。當專案是基於已有git倉庫時這很有用。

如果只是想修改commit時的提交資訊,可以用:

$ git commit --amend

分支(branch)

新建

$ git branch new_branch

或$ git checkout -b new_branch

檢視$ git show-branch

提取$ git checkout new_branch

刪除$ git branch -d new_branch

歸併其它分支

$ git merge branchname

雜項:

某些檔案不需要讓git去track,可以在.gitignore中設定忽略這些檔案。

指定特定檔案用--,如:

$ git checkout -- dir/main.c

git有幾個內建的符號索引指標:

head:永遠指向當前分支的最近一次commit

orig_head:git reset或git merge後,原來的head被存在這裡

fetch_head:git fetch後所有分支的頭索引指標

merge_head:git merge時另一分支的頭索引指標

相對索引:head^ head^^ head~2 head@等

當碰到regression時,可以用git bisect和git blame。前者用來查詢問題從哪個版本開始出現,後者列出每行**的修改者和時間。

分布式管理

複製**倉庫

$ git clone /tmp/repo repo # 在當前目錄下建立/tmp/repo的**倉庫拷貝

複製遠端**倉庫(如使用者名稱zjin,主機名zjin-machine)

$ git clone zjin@zjin-machine:/home/zjin/repo

向遠端**倉庫提交

$ git push /tmp/repo master # 將本地master分支中的改動提交到/tmp/repo中

從遠端**倉庫同步

$ git pull /tmp/repo master # 將/tmp/repo中的改動同步到本地的master分支中

該命令相當於git fetch 加 git merge

一些相關資料:

給svn使用者的git教程 

repo和git 

活靈活現用git-技巧篇 

《version control with git》

《git community book》

常用命令 Git 常用命令大全

安裝教程可參照 廖雪峰老師的安裝教程。git config 在git中,使用git config 命令來配置 git 的配置檔案,git配置級別主要有3類 1 倉庫級別 local 本地 git 倉庫級別配置檔案,作用於當前倉庫。優先順序最高 2 使用者級別 global,全域性配置檔案,作用於所有...

git 常用命令

檢視是否存在檔案需要上傳 git status git add git commit m 建立遠端倉庫 git remote add origin 116.255.146.153 ruby cd work daily project.git 更新git fetch 116.255.146.153 r...

git常用命令

詳細 1,git log p 命令來顯示每一次提交與其父節點提交內容之間快照的差異。2,為了檢視載入 staged 而並未提交 not committed 的內容差異,可以使用 git diff stage 命令 在git 1.6之前的版本中,使用 cached 適應情形 在執行git commit...