常用 Git 命令總結
前言
Git 是我們日常工作中使用頻率極高的工具,各種指令讓人眼花繚亂,今天,我們就在這裡總結一下它的一些基本指令,算是做一份操作筆記吧。
基本指令
git add
把要提交的檔案的資訊新增到暫存區中。當使用 git commit 時,將依據暫存區中的內容來進行檔案的提交。
它通常將現有路徑的當前內容作為一個整體新增,但是通過一些選項,它也可以用於新增內容,只對所應用的工作樹檔案進行一些更改,或刪除工作樹中不存在的路徑了。
“索引”儲存工作樹內容的快照,並且將該快照作為下一個提交的內容。 因此,在對工作樹進行任何更改之後,並且在執行 git commit
命令之前,必須使用 git add
命令將任何新的或修改的檔案新增到索引。
該命令可以在提交之前多次執行。它只在執行 git add
命令時新增指定檔案的內容; 如果希望隨後的更改包含在下一個提交中,那麼必須再次執行 git add
將新的內容新增到索引。
# 把指定的檔案新增到暫存區中 $ git add <檔案路徑> # 新增所有修改、已刪除的檔案到暫存區中 $ git add -u [<檔案路徑>] $ git add --update [<檔案路徑>] # 新增所有修改、已刪除、新增的檔案到暫存區中,省略 <檔案路徑> 即為當前目錄 $ git add -A [<檔案路徑>] $ git add --all [<檔案路徑>] # 檢視所有修改、已刪除但沒有提交的檔案,進入一個子命令系統 $ git add -i [<檔案路徑>] $ git add --interactive [<檔案路徑>]
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
還會更新 HEAD
,將指定的分支設定為當前分支。
# 切換到已存在的指定分支
$ git checkout <分支名稱>
# 建立並切換到指定的分支,保留所有的提交記錄
# 等同於 "git branch" 和 "git checkout" 兩個命令合併
$ git checkout -b <分支名稱>
# 建立並切換到指定的分支,刪除所有的提交記錄
$ git checkout --orphan <分支名稱>
# 替換掉本地的改動,新增的檔案和已經新增到暫存區的內容不受影響
$ git checkout <檔案路徑>
git checkout
是 git 最常用的命令之一,同時也是一個很危險的命令,因為這條命令會重寫工作區。
git clone
將儲存庫克隆到新建立的目錄中,為克隆的儲存庫中的每個分支建立遠端跟蹤分支(使用 git branch -r
可見),並從克隆檢出的儲存庫作為當前活動分支的初始分支。
# 預設在當前目錄下建立和版本庫名相同的資料夾並下載版本到該資料夾下
$ git clone <遠端倉庫的網址>
# 指定本地倉庫的目錄
$ git clone <遠端倉庫的網址> <本地目錄>
# -b 指定要克隆的分支,預設是master分支
$ git clone <遠端倉庫的網址> -b <分支名稱> <本地目錄>
git commit
將索引的當前內容與描述更改的使用者和日誌訊息一起儲存在新的提交中。
# 把暫存區中的檔案提交到本地倉庫,呼叫文字編輯器輸入該次提交的描述資訊
$ git commit
# 把暫存區中的檔案提交到本地倉庫中並新增描述資訊
$ git commit -m "<提交的描述資訊>"
# 把所有修改、已刪除的檔案提交到本地倉庫中
# 不包括未被版本庫跟蹤的檔案,等同於先呼叫了 "git add -u"
$ git commit -a -m "<提交的描述資訊>"
# 修改上次提交的描述資訊
$ git commit --amend
git config
主要是用來配置 Git 的相關引數,其主要操作有:
# 檢視配置資訊
# --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 一共有3個配置檔案:
- 倉庫級的配置檔案:在倉庫的
.git/.gitconfig
,該配置檔案只對所在的倉庫有效。- 全域性配置檔案:Mac 系統在
~/.gitconfig
,Windows 系統在C:\Users\<使用者名稱>\.gitconfig
。- 系統級的配置檔案:在 Git 的安裝目錄下(Mac 系統下安裝目錄在
/usr/local/git
)的etc
資料夾中的gitconfig
。
git diff
用於顯示提交和工作樹等之間的更改。
此命令比較的是工作目錄中當前檔案和暫存區域快照之間的差異,也就是修改之後還沒有暫存起來的變化內容。
# 比較當前檔案和暫存區中檔案的差異,顯示沒有暫存起來的更改
$ git diff
# 比較暫存區中的檔案和上次提交時的差異
$ git diff --cached
$ git diff --staged
# 比較當前檔案和上次提交時的差異
$ git diff HEAD
# 檢視從指定的版本之後改動的內容
$ git diff <commit ID>
# 比較兩個分支之間的差異
$ git diff <分支名稱> <分支名稱>
# 檢視兩個分支分開後各自的改動內容
$ git diff <分支名稱>...<分支名稱>
git fetch
從遠端倉庫獲取最新的版本到本地的 tmp 分支上。
# 將遠端倉庫所有分支的最新版本全部取回到本地
$ git fetch <遠端倉庫的別名>
# 將遠端倉庫指定分支的最新版本取回到本地
$ git fetch <遠端主機名> <分支名>
git init
初始化專案所在目錄,初始化後會在當前目錄下出現一個名為 .git 的目錄。
# 初始化本地倉庫,在當前目錄下生成 .git 資料夾
$ git init
git log
顯示提交的記錄。
# 列印所有的提交記錄
$ git log
# 列印從第一次提交到指定的提交的記錄
$ git log <commit ID>
# 列印指定數量的最新提交的記錄
$ git log -<指定的數量>
git merge
用於將兩個或兩個以上的開發歷史加入(合併)一起。
# 把指定的分支合併到當前所在的分支下,並自動進行新的提交
$ git merge <分支名稱>
# 把指定的分支合併到當前所在的分支下,不進行新的提交
$ git merge --no-commit <分支名稱>
git mv
重新命名檔案或者資料夾。
# 重新命名指定的檔案或者資料夾
$ git mv <原始檔/資料夾> <目標檔案/資料夾>
git pull
從遠端倉庫獲取最新版本併合併到本地。
首先會執行 git fetch
,然後執行 git merge
,把獲取的分支的 HEAD 合併到當前分支。
# 從遠端倉庫獲取最新版本。
$ git pull
git push
把本地倉庫的提交推送到遠端倉庫。
# 把本地倉庫的分支推送到遠端倉庫的指定分支
$ git push <遠端倉庫的別名> <本地分支名>:<遠端分支名>
# 刪除指定的遠端倉庫的分支
$ git push <遠端倉庫的別名> :<遠端分支名>
$ git push <遠端倉庫的別名> --delete <遠端分支名>
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 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 rm
刪除檔案或者資料夾。
# 移除跟蹤指定的檔案,並從本地倉庫的資料夾中刪除
$ git rm <檔案路徑>
# 移除跟蹤指定的資料夾,並從本地倉庫的資料夾中刪除
$ git rm -r <資料夾路徑>
# 移除跟蹤指定的檔案,在本地倉庫的資料夾中保留該檔案
$ git rm --cached
git status
用於顯示工作目錄和暫存區的狀態。使用此命令能看到那些修改被暫存到了, 哪些沒有, 哪些檔案沒有被 Git tracked 到。
# 檢視本地倉庫的狀態
$ git status
git status
不顯示已經commit
到專案歷史中去的資訊。看專案歷史的資訊要使用
git log
。
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
- ~
- 本文完,感謝閱讀!
~
學習有趣的知識,結識有趣的朋友,塑造有趣的靈魂!
我是〖程式設計三昧〗的作者 隱逸王,我的公眾號是『程式設計三昧』,歡迎關注,希望大家多多指教!
你來,懷揣期望,我有墨香相迎! 你歸,無論得失,唯以餘韻相贈!
知識與技能並重,內力和外功兼修,理論和實踐兩手都要抓、兩手都要硬!