git命令大全

weixin_34236497發表於2016-06-02

git config

配置 Git 的相關引數。
Git 一共有3個配置檔案:
1. 倉庫級的配置檔案:在倉庫的 .git/.gitconfig,該配置檔案只對所在的倉庫有效。
2. 全域性配置檔案:Mac 系統在 ~/.gitconfig,Windows 系統在 C:\Users\<使用者名稱>\.gitconfig
3. 系統級的配置檔案:在 Git 的安裝目錄下(Mac 系統下安裝目錄在 /usr/local/git)的 etc 資料夾中的 gitconfig

# 檢視配置資訊
# --local:倉庫級,--global:全域性級,--system:系統級
$ git config <--local | --global | --system> -l

# 檢視當前生效的配置資訊
$ git config -l

# 編輯配置檔案
# --local:倉庫級,--global:全域性級,--system:系統級
$ git config <--local | --global | --system> -e

# 新增配置項
# --local:倉庫級,--global:全域性級,--system:系統級
$ git config <--local | --global | --system> --add <name> <value>

# 獲取配置項
$ git config <--local | --global | --system> --get <name>

# 刪除配置項
$ git config <--local | --global | --system> --unset <name>

# 配置提交記錄中的使用者資訊
$ git config --global user.name <使用者名稱>
$ git config --global user.email <郵箱地址>

# 更改Git快取區的大小
# 如果提交的內容較大,預設快取較小,提交會失敗
# 快取大小單位:B,例如:524288000(500MB)
$ git config --global http.postBuffer <快取大小>

# 呼叫 git status/git diff 命令時以高亮或彩色方式顯示改動狀態
$ git config --global color.ui true

# 配置可以快取密碼,預設快取時間15分鐘
$ git config --global credential.helper cache

# 配置密碼的快取時間
# 快取時間單位:秒
$ git config --global credential.helper 'cache --timeout=<快取時間>'

# 配置長期儲存密碼
$ git config --global credential.helper store

git clone

從遠端倉庫克隆一個版本庫到本地。

# 預設在當前目錄下建立和版本庫名相同的資料夾並下載版本到該資料夾下
$ git clone <遠端倉庫的網址>

# 指定本地倉庫的目錄
$ git clone <遠端倉庫的網址> <本地目錄>

# -b 指定要克隆的分支,預設是master分支
$ git clone <遠端倉庫的網址> -b <分支名稱> <本地目錄>

git init

初始化專案所在目錄,初始化後會在當前目錄下出現一個名為 .git 的目錄。

# 初始化本地倉庫,在當前目錄下生成 .git 資料夾
$ git init

git status

檢視本地倉庫的狀態。

# 檢視本地倉庫的狀態
$ git status

# 以簡短模式檢視本地倉庫的狀態
# 會顯示兩列,第一列是檔案的狀態,第二列是對應的檔案
# 檔案狀態:A 新增,M 修改,D 刪除,?? 未新增到Git中
$ git status -s

git remote

操作遠端庫。

# 列出已經存在的遠端倉庫
$ git remote

# 列出遠端倉庫的詳細資訊,在別名後面列出URL地址
$ git remote -v
$ git remote --verbose

# 新增遠端倉庫
$ git remote add <遠端倉庫的別名> <遠端倉庫的URL地址>

# 修改遠端倉庫的別名
$ git remote rename <原遠端倉庫的別名> <新的別名>

# 刪除指定名稱的遠端倉庫
$ git remote remove <遠端倉庫的別名>

# 修改遠端倉庫的 URL 地址
$ git remote set-url <遠端倉庫的別名> <新的遠端倉庫URL地址>

git branch

操作 Git 的分支命令。

# 列出本地的所有分支,當前所在分支以 "*" 標出
$ git branch

# 列出本地的所有分支並顯示最後一次提交,當前所在分支以 "*" 標出
$ git branch -v

# 建立新分支,新的分支基於上一次提交建立
$ git branch <分支名>

# 修改分支名稱
# 如果不指定原分支名稱則為當前所在分支
$ git branch -m [<原分支名稱>] <新的分支名稱>
# 強制修改分支名稱
$ git branch -M [<原分支名稱>] <新的分支名稱>

# 刪除指定的本地分支
$ git branch -d <分支名稱>

# 強制刪除指定的本地分支
$ git branch -D <分支名稱>

git checkout

檢出命令,用於建立、切換分支等。

# 切換到已存在的指定分支
$ git checkout <分支名稱>

# 建立並切換到指定的分支,保留所有的提交記錄
# 等同於 "git branch" 和 "git checkout" 兩個命令合併
$ git checkout -b <分支名稱>

# 建立並切換到指定的分支,刪除所有的提交記錄
$ git checkout --orphan <分支名稱>

# 替換掉本地的改動,新增的檔案和已經新增到暫存區的內容不受影響
$ git checkout <檔案路徑>

git cherry-pick

把已經提交的記錄合併到當前分支。

# 把已經提交的記錄合併到當前分支
$ git cherry-pick <commit ID>

git add

把要提交的檔案的資訊新增到暫存區中。當使用 git commit 時,將依據暫存區中的內容來進行檔案的提交。

# 把指定的檔案新增到暫存區中
$ git add <檔案路徑>

# 新增所有修改、已刪除的檔案到暫存區中
$ git add -u [<檔案路徑>]
$ git add --update [<檔案路徑>]

# 新增所有修改、已刪除、新增的檔案到暫存區中,省略 <檔案路徑> 即為當前目錄
$ git add -A [<檔案路徑>]
$ git add --all [<檔案路徑>]

# 檢視所有修改、已刪除但沒有提交的檔案,進入一個子命令系統
$ git add -i [<檔案路徑>]
$ git add --interactive [<檔案路徑>]

git commit

將暫存區中的檔案提交到本地倉庫中。

# 把暫存區中的檔案提交到本地倉庫,呼叫文字編輯器輸入該次提交的描述資訊
$ git commit

# 把暫存區中的檔案提交到本地倉庫中並新增描述資訊
$ git commit -m "<提交的描述資訊>"

# 把所有修改、已刪除的檔案提交到本地倉庫中
# 不包括未被版本庫跟蹤的檔案,等同於先呼叫了 "git add -u"
$ git commit -a -m "<提交的描述資訊>"

# 修改上次提交的描述資訊
$ git commit --amend

git fetch

從遠端倉庫獲取最新的版本到本地的 tmp 分支上。

# 將遠端倉庫所有分支的最新版本全部取回到本地
$ git fetch <遠端倉庫的別名>

# 將遠端倉庫指定分支的最新版本取回到本地
$ git fetch <遠端主機名> <分支名>

git merge

合併分支。

# 把指定的分支合併到當前所在的分支下
$ git merge <分支名稱>

git diff

比較版本之間的差異。

# 比較當前檔案和暫存區中檔案的差異,顯示沒有暫存起來的更改
$ git diff

# 比較暫存區中的檔案和上次提交時的差異
$ git diff --cached
$ git diff --staged

# 比較當前檔案和上次提交時的差異
$ git diff HEAD

# 檢視從指定的版本之後改動的內容
$ git diff <commit ID>

# 比較兩個分支之間的差異
$ git diff <分支名稱> <分支名稱>

# 檢視兩個分支分開後各自的改動內容
$ git diff <分支名稱>...<分支名稱>

git pull

從遠端倉庫獲取最新版本併合併到本地。
首先會執行 git fetch,然後執行 git merge,把獲取的分支的 HEAD 合併到當前分支。

# 從遠端倉庫獲取最新版本。
$ git pull

git push

把本地倉庫的提交推送到遠端倉庫。

# 把本地倉庫的分支推送到遠端倉庫的指定分支
$ git push <遠端倉庫的別名> <本地分支名>:<遠端分支名>

# 刪除指定的遠端倉庫的分支
$ git push <遠端倉庫的別名> :<遠端分支名>
$ git push <遠端倉庫的別名> --delete <遠端分支名>

git log

顯示提交的記錄。

# 列印所有的提交記錄
$ git log

# 列印從第一次提交到指定的提交的記錄
$ git log <commit ID>

# 列印指定數量的最新提交的記錄
$ git log -<指定的數量>

git reset

還原提交記錄。

# 重置暫存區,但檔案不受影響
# 相當於將用 "git add" 命令更新到暫存區的內容撤出暫存區,可以指定檔案
# 沒有指定 commit ID 則預設為當前 HEAD
$ git reset [<檔案路徑>]
$ git reset --mixed [<檔案路徑>]

# 將 HEAD 的指向改變,撤銷到指定的提交記錄,檔案未修改
$ git reset <commit ID>
$ git reset --mixed <commit ID>

# 將 HEAD 的指向改變,撤銷到指定的提交記錄,檔案未修改
# 相當於呼叫 "git reset --mixed" 命令後又做了一次 "git add"
$ git reset --soft <commit ID>

# 將 HEAD 的指向改變,撤銷到指定的提交記錄,檔案也修改了
$ git reset --hard <commit ID>

git revert

生成一個新的提交來撤銷某次提交,此次提交之前的所有提交都會被保留。

# 生成一個新的提交來撤銷某次提交
$ git revert <commit ID>

git tag

操作標籤的命令。

# 列印所有的標籤
$ git tag

# 新增輕量標籤,指向提交物件的引用,可以指定之前的提交記錄
$ git tag <標籤名稱> [<commit ID>]

# 新增帶有描述資訊的附註標籤,可以指定之前的提交記錄
$ git tag -a <標籤名稱> -m <標籤描述資訊> [<commit ID>]

# 切換到指定的標籤
$ git checkout <標籤名稱>

# 檢視標籤的資訊
$ git show <標籤名稱>

# 刪除指定的標籤
$ git tag -d <標籤名稱>

# 將指定的標籤提交到遠端倉庫
$ git push <遠端倉庫的別名> <標籤名稱>

# 將本地所有的標籤全部提交到遠端倉庫
$ git push <遠端倉庫的別名> –tags

git mv

重新命名檔案或者資料夾。

# 重新命名指定的檔案或者資料夾
$ git mv <原始檔/資料夾> <目標檔案/資料夾>

git rm

刪除檔案或者資料夾。

# 移除跟蹤指定的檔案,並從本地倉庫的資料夾中刪除
$ git rm <檔案路徑>

# 移除跟蹤指定的資料夾,並從本地倉庫的資料夾中刪除
$ git rm -r <資料夾路徑>

# 移除跟蹤指定的檔案,在本地倉庫的資料夾中保留該檔案
$ git rm --cached

Git操作場景示例

1. 刪除掉本地不存在的遠端分支

多人合作開發時,如果遠端的分支被其他開發刪除掉,在本地執行 git branch --all 依然會顯示該遠端分支,可使用下列的命令進行刪除:

# 使用 pull 命令,新增 -p 引數
$ git pull -p

# 等同於下面的命令
$ git fetch -p
$ git fetch --prune origin