commands
config
點選檢視程式碼
git config --local user.name "<user-name>"
# 配置本地(當前專案)的使用者名稱
git config --local user.email "<user-email>"
# 配置本地(當前專案)的使用者郵箱
git config --global user.name "<user-name>"
# 配置全域性的使用者名稱
git config --global user.email "<user-email>"
# 配置全域性的使用者郵箱
basic
點選檢視程式碼
git init
# 初始化git資料夾
git add ./<file-name>
# 提交全部到暫存區(staged),新增file-name則指定提交檔案
git commit -m <message>
# 提交
git branch
# 檢視本地分支情況
git branch -r
# 檢視遠端分支情況
git branch -a
# 檢視所有分支,包括本地和遠端
git branch <branch-name>
# 建立<branch-name>分支
git switch <branch-name>
# 切換分支
git switch -c <branch-name>
# 建立分支並切換到該分支
git checkout <branch-name>
# 切換分支
git checkout -b <branch-name>
# 建立分支並切換到該分支
delete
點選檢視程式碼
git branch -d <branch-name>
# 刪除分支
git push <remote-name> --delete <branch-name>
# 刪除遠端分支
git push <remote-name> :<remote-branch-name>
# 刪除遠端分支
remote
點選檢視程式碼
git restore <file-name>
# 從暫存區匯出覆蓋工作區內容
git checkout -- <file-name>
# 從暫存區匯出覆蓋工作區內容
git restore --staged <file-name>
# 從當前的暫存區撤銷暫存,如果提交到暫存區以後工作區又有修改,那撤回後,上次提交的暫存區內容會丟失
git reset HEAD
# 從當前分支的HEAD匯出覆蓋暫存區內容
git reset --hard <commit-id>
# 當前分支回滾至<commit-id>版本,並覆蓋工作區和暫存區
git reset --soft <commit-id>
# 當前分支回滾至<commit-id>版本,但不覆蓋工作區和暫存區
merge
點選檢視程式碼
git merge <branch-name>
# 合併分支
git merge --no-ff <branch-name>
# 合併分支,不用預設的fast-forward模式
restore
點選檢視程式碼
git restore <file-name>
# 從暫存區匯出覆蓋工作區內容
git checkout -- <file-name>
# 從暫存區匯出覆蓋工作區內容
git restore --staged <file-name>
# 從當前的暫存區撤銷暫存,如果提交到暫存區以後工作區又有修改,那撤回後,上次提交的暫存區內容會丟失
git reset HEAD
# 從當前分支的HEAD匯出覆蓋暫存區內容
git reset --hard <commit-id>
# 當前分支回滾至<commit-id>版本,並覆蓋工作區和暫存區
git reset --soft <commit-id>
# 當前分支回滾至<commit-id>版本,但不覆蓋工作區和暫存區
tag
點選檢視程式碼
# Git兩種標籤
- 輕量級的(lightweight)
- 含附註的(annotated)
git tag
# 檢視本地tag
git tag -l
# 檢視標籤,可以用萬用字元去篩選,比如git tag -l "v1.8.5*".-l 可換為--list
git ls-remote --tags <remote-name>
# 檢視遠端倉庫的標籤資訊
git tag <tag-name>
# 打標籤,不帶備註資訊
git tag -a <tag-name> -m <message>
# 給當前分支的HEAD打上標籤
git tag -a <tag-name> -m <message> <commit-id>
# 給當前分支的指定commit-id打上標籤
git show <tag-name>
# 檢視tag資訊,含附註的標籤是獨立的物件,檢視時可以看到標籤的提交者、建立人等資訊,比如如下資訊,而輕量標籤則不具備這些資訊
#tag v5
#Tagger: chle <chle@local.com>
#Date: Wed May 29 14:35:35 2024 +0800
#v5
git tag -d <tag-name>
# 刪除tag
git push <remote-name> <tag-name>
# 推送指定標籤至遠端
git push <remote-name> --tags
# 推送全部標籤至遠端,注意是推送那些沒有推送到遠端去過的標籤
git push <remote-name> --detele tag <tag-name>
# 刪除遠端指定標籤
git push <remote-name> :refs/tags/<tag-name>
# 刪除遠端指定標籤
git fetch --tags
# 從遠端獲取全部標籤
- 檢視遠端標籤時,可以看到的附註標籤和輕量標籤之間的區別
log
點選檢視程式碼
git log
# 檢視提交歷史
git log -n
# 檢視最近n條提交記錄
git reflog
# 檢視命令記錄
git log --graph --pretty=oneline --abbrev-commit
# abbrev-commit縮略提交展示
git log --pretty=format:"%h %s"
# 個人log配置個性化輸出命令
%H 提交物件(commit)的完整雜湊字串
%h 提交物件的簡短雜湊字串
%T 樹物件(tree)的完整雜湊字串
%t 樹物件的簡短雜湊字串
%P 父物件(parent)的完整雜湊字串
%p 父物件的簡短雜湊字串
%an 作者(author)的名字
%ae 作者的電子郵件地址
%ad 作者修訂日期(可以用 -date= 選項定製格式)
%ar 作者修訂日期,按多久以前的方式顯示
%cn 提交者(committer)的名字
%ce 提交者的電子郵件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式顯示
%s 提交說明
diff
點選檢視程式碼
git diff
# 比較暫存區和工作區的區別,a是暫存區,b是工作區,可指定檔案 git diff <file-name>
git diff HEAD
# 比較的是當前分支的HEAD和工作區的區別,a是HEAD,b是工作區
git diff HEAD~
# 比較的是當前分支的最新一次的上一次提交和工作區的區別,a是HEAD~,b是工作區
git diff --cached
# 比較當前分支上的最新的提交與暫存區的差異,a是分支最新的提交,b是工作區,可指定檔案 git diff --cached <file-name>
git diff --staged
# 比較當前分支上的最新的提交與暫存區的差異,a是分支最新的提交,b是工作區,可指定檔案 git diff --staged <file-name>
git diff --staged HEAD
# 比較當前分支上的最新的提交與暫存區的差異,a是HEAD,b是工作區
reference
subject
- Pro Git from git officeal
- learn git - 廖雪峰
- Pro Git(中文版)
points
- git HEAD / HEAD^ / HEAD~ 的含義
- Git 常用命令介紹)
- 細讀 Git | 讓你弄懂 origin、HEAD、FETCH_HEAD 相關內容