# 前言

實際開始使用 Git 之後,會執行到的指令幾乎是大同小異,不外乎 git statusgit addgit commit -m 等指令不斷的重複。
雖然這些指令都不算太長,不過在輸入指令的過程,無形之中是會浪費不少打字時間的。
這邊呼籲 GUI 派的讀者,不要在看到這句話之後趁機推坑,不然會讓指令派的讀者過得太舒服!!

如果有辦法少打幾個字,那麼 打指令時會產生一種快感 將會在不知不覺中省下不少時間!

為指令派的讀者獻上此系列文最後的溫柔:

設定指令縮寫

# Git 縮寫相關指令

分別介紹一下「設定縮寫」、「查看縮寫」、「刪除縮寫」三個指令:

# 設定縮寫的指令

使用這個指令,就可以在設定檔中新增指令的縮寫:

git config --global alias.[想要縮寫的名稱] [原本的指令]

例如:

git config --global alias.st status

表示要讓 git st 指令等同於 git status 的效果。

注意這個行為並不是「取代」,只是設定「縮寫」,所以 git stgit status 兩個指令都可以在你的 Git 專案起作用。

# 查看已設定的縮寫

要查看自己設定了哪些縮寫的話,可以這樣下指令查詢:

git config --get-regexp alias

# 刪除縮寫設定

當發現有些縮寫設定後卻都用不到,可以使用這個指令把縮寫移除:

git config --global --unset alias.[縮寫名稱]

# 常見指令縮寫

介紹一下筆者自己有設定,也推薦可以使用的縮寫

# git status

git config --global alias.st status

執行完後,未來執行 git status ,只需要輸入下列指令,就能代表相同的意思

git st

# git log

查看 log 的文章有提到 git log 常搭配的參數,例如 --oneline--graph ,如果設定成縮寫就會方便很多:

git config --global alias.l  "log --oneline --graph"

之後只要執行縮寫指令,就能達到完整指令的效果:

git l

此外,還有那串幾乎不太可能直接輸入使用的 format 指令,也可以設定縮寫:

git config --global alias.ls "log --oneline --graph --pretty=format:'%C(yellow)%h%Creset - %C(cyan)<%an>%Creset %s %C(magenta)(%ar)%Creset'"

打完之後就可以用這個指令呈現整齊的 log 資訊:

git ls

註: -n ( n 為自然數 ),是 git log 原本就能用的參數,是讓 git log 呈現特定筆數的參數。

# git add

git add 指令沒什麼好縮寫的,這裡設定的是「將檔案移出暫存區」指令。

當時還不知道 git reset 也能將檔案移出暫存區,一直覺得 git restore --staged 指令不好打,於是設定了這個縮寫:

git config --global alias.rmadd "restore --staged"

# git commit

commit 系列算是很常用的指令,介紹一下筆者有設定的縮寫。

# git commit

git commit 本身的縮寫

git config --global alias.cm commit

# git commit -m

提交版本時會用到的縮寫

git config --global alias.cmm "commit -m"

命名概念很單純,就是 commit + -m = cmm

這個指令設定完之後,提交版本時就不用多打 -m 參數了:

git cmm "版本標題訊息"

# git add . + git commit

一次提交所有異動檔案的縮寫:

git config --global alias.cmam "commit -am"

# git commit --amend -m

要「修正上一個版本提交的訊息」會用到的指令,也設定一個縮寫:

git config --global alias.cmrn "commit --amend -m"

概念是 commit rename 的簡稱: cmrn

# git commit --amend --no-edit

單純的加一些資料到最近的版本指令也是頗長,使用縮寫會方便很多:

git config --global alias.cmcm "commit --amend --no-edit"

筆者的命名概念是 「兩個 commit」 ,使用了 cmcm 當作這個指令的簡稱。

# git branch

再來是分支系列的縮寫

# git branch

git branch 本身的縮寫:

git config --global alias.br branch

# git branch -m

重新命名目前分支指令的縮寫:

git config --global alias.brm "branch -m"

# git branch -d

刪除分支的指令縮寫:

git config --global alias.brd "branch -d"

# git branch -f

強制建立分支指令縮寫:

git config --global alias.brf "branch -f"

# git checkout

切換分支的縮寫:

git config --global alias.co checkout

# git checkout -b

建立並且切換分支的縮寫:

git config --global alias.cob "checkout -b"

# 另一種設定縮寫的方式

Git 初始化設定 文章中,常見問題「第四題」曾經提到過, git config --global 指令是用來更改 .gitconfig 檔案的指令。

既然我們是用它來設定縮寫,代表我們可以直接去 .gitconfig 檔案編輯縮寫。
如果你沒操作過這個檔案的話,可以到下列的路徑開啟檔案:

  • Mac~/.gitconfig
  • WindowsC:\Users\你的使用者名字\.gitconfig

接著請找到 [alias] 區塊,就可以看到剛剛設定縮寫的資料,如果沒有設定過任何縮寫,可以「手動新增」[alias] 區塊

這裡提供所有筆者設定資訊給大家參考,需要的話可以複製回去更改成習慣的設定:

[alias]
	# status	
	st = status
	
	#log
	l = log --oneline --graph # 顯示 log
	ls = log --oneline --graph --pretty=format:'%C(yellow)%h%Creset - %C(cyan)<%an>%Creset %s %C(magenta)(%ar)%Creset' # 格式化 log
	rl = reflog --pretty=format:'%C(yellow)%h%Creset %C(red)%gd%Creset %C(cyan)<%an>%Creset %C(auto)%s%C(reset) %C(magenta)(%cr)%C(reset)' # 格式化 reflog
	
	# add
	all = add .
	rmadd = restore --staged # 取消 add
	
	# commit
	cm = commit # commit
	cmm = commit -m # commit message
	cmam = commit -am # 一次整合 add 跟 commit
	cmcm = commit --amend --no-edit
	cmrn = commit --amend -m # 重新更改最近一次的 commit 訊息
	cmempty = commit --allow-empty -m --no-edit # 建立一個空的 commit
	
	# branch
	br = branch # 顯示所有 branch
	brv = branch -v # 顯示所有 branch 的最後一次 commit
	brm = branch -m # 重新命名 branch
	brd = branch -d # 刪除 branch
	brf = branch -f # 強制建立分支
	
	# checkout
	co = checkout # 切換分支
	cob = checkout -b # 建立並切換分支
	# reset
	rst = reset # 取消 add
	rsth = reset --hard # reset hard 模式
	rsthp = reset --hard HEAD^ # 回到上一個 commit --hard
	rstp = reset  HEAD^ # 回到上一個 commit --mixed
	rsto = reset  --hard  ORIG_HEAD
	#rebase
	rb = rebase # rebase
	rbi = rebase -i # 互動式 rebase
	rbc = rebase --continue # 繼續 rebase
	# 遠端相關
	fetchp = fetch --prune # 取得遠端所有資料並刪除已經不存在的 branch
	bra = branch -a # 顯示所有 branch
    psd = push origin -d # 刪除遠端 branch
	psf = push -f # 強制 push
	pso = push -u origin # 建立遠端 branch
	getalias = config --get-regexp alias # 取得所有 alias

# 常用指令一覽表

# 初始設定

# 查詢目前 Git 所使用的 Email

git config --global user.email

# 設定 Git 的使用者名稱

git config --global user.name 使用者名稱

# 查詢 Git 目前設定的文字編輯器

git config core.editor

# 設定 Git 文字編輯器

git config --global core.editor 程式名稱

# 將 Git 文字編輯器 Visual Studio Code

git config --global core.editor "code --wait"

詳細資訊可參考 GitHub 官方文件

# 開始使用 Git

# 初始化 Git 儲存庫

git init

# 將工作目錄所有檔案加到暫存區

git add .

# 將指定的檔案加到暫存區

git add 檔案名稱

# 將暫存區的檔案提交到 Git 儲存庫

git commit -m "版本訊息"

# 一次完成加入暫存區與提交版本

git commit --am "版本訊息"
git commit -a -m "版本訊息"

# 查詢目前工作目錄中的變化

git status

# 查詢 commit 資訊

git log

# 開發過程會用到的指令

# 復原加入暫存區的檔案

git restore --staged 檔案名稱

# 復原修改檔案的編輯內容

git restore 檔案名稱

# 修正最後一次提交的訊息

git commit --amend -m "訊息"

# 修正最後一次的提交內容

git commit --amend

# 使用 .gitignore 排除檔案

  1. 在工作目錄新增 .gitignore 檔案
  2. 在檔案中輸入要排除的檔案名稱

# 讓分支回到過去的 commit

# Mixed Reset

git reset commitID

# Soft Reset

git reset --soft commitID

# Hard Reset

git reset --hard commitID

# 重新定義基底

git rebase commitID

# rebase 互動模式

git rebase -i commitID

# 復原 commit

git revert HEAD

# 使用 Git 分支

# 查詢分支

git branch

# 建立分支

git branch 分支名稱
git checkout -b 分支名稱  # 切換並建立新分支

# 強制建立已存在分支

git branch -f 分支名稱

# 切換分支

git checkout 分支名稱

# 刪除分支

git branch -d 分支名稱

# 強制刪除分支

git branch -D 分支名稱

# 合併分支

git merge 要被合併的分支名稱

# 發生衝突,放棄合併

git merge --abort

# 使用遠端儲存庫

# 新增遠端儲存庫的位置

git remote add 遠端的名稱 遠端網址

# 推送分支至遠端並追蹤

git push -u 遠端名稱 地端分支:遠端分支

# clone 遠端儲存庫

git clone 遠端網址

# 更新遠端分支的異動回地端

git pull

# 刪除遠端分支

git push 遠端名稱 --delete 遠端分支名稱
git push 遠端名稱 -d 遠端分支名稱
git push origin  :遠端分支名稱

# 同步遠端分支

git fetch

# 修剪遠端分支

git fetch --prune