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