Git初識-常用命令

一平米發表於2024-05-29

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 相關內容