内容大綱
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