現在很多人使用像是 oh-my-zsh 這類工具,這些工具內建了許多非常有用的功能,包括 Git 快捷鍵。別誤會,這些工具真的很好。但我認為理解背後的運作原理是非常重要的。你可以隨意使用各種工具,但從根本上建立自己的工作流程是有真正價值的。
如果你對我為什麼認為 應該自己編寫工具 感到好奇,你可以查看我在 這裡 的想法。不過現在,我想告訴你 Bash 函數 和 別名 如何使 Git 工作流程變得更快、更簡單,甚至更好。我希望這篇文章能讓你興奮地挖掘你的 shell 的 rc 檔,開始編寫自己的自定義函數和別名,不僅僅是為了 Git,而是為了你所有的工作!
首先,讓我們簡化一些常見的 Git 命令。以下是我設置的一些別名,讓終端使用生活變得更輕鬆。每次都輸入一條長命令為什麼不可以縮短到兩個字母呢?
alias gs="git status" # 顯示 Git 狀態
alias ga="git add ." # 將所有檔案加入暫存區
alias gc="git commit -m" # 帶訊息提交
alias gp="git push" # 將當前分支推送到遠端
alias gl="git pull" # 從遠端分支拉取
alias glog="git log --oneline --graph --all --decorate" # 以單行格式查看 Git 日誌
alias gco="git checkout" # 切換分支
alias gcb="git checkout -b" # 創建並切換到新分支
alias gd="git diff --cached" # 查看暫存變更的差異
alias grh="git reset --hard HEAD" # 硬重置到最新提交
alias gb="git branch -vv" # 以單行格式顯示分支與最後提交
alias gf="git fetch --all" # 獲取所有遠端分支
這些別名節省了幾秒鐘,但這些時間是累積的。而且,使用起來也很好。
現在,讓我們透過一些自定義 Bash 函數 來提升工作效率,這些函數可以自動化您的工作流程中的更多步驟,讓您避免鍵入多個命令而遺漏任何步驟。
gnew() {
git checkout -b "$1"
git push -u origin "$1"
}
# 用法: gnew branch_name
gquick() {
git commit -am "$1"
git push
}
# 用法: gquick "commit message"
grebase() {
git fetch
git rebase origin/main
}
# 用法: grebase
gundo() {
git reset --soft HEAD~1
}
# 用法: gundo
gsquash() {
git reset --soft HEAD~"$1"
git commit --amend
}
# 用法: gsquash 3 (壓縮最近的 3 次提交)
gupdate-fork() {
git fetch upstream
git checkout main
git merge upstream/main
git push origin main
}
# 用法: gupdate-fork
grebasei() {
git rebase -i HEAD~"$1"
}
# 用法: grebasei 3 (互動式變基最近的 3 次提交)
這些最後的函數增強了一般 Git 工作流程,讓事情變得更加高效。
glogtree() {
git log --graph --oneline --decorate --all
}
# 用法: glogtree
gresetremote() {
git fetch origin
git reset --hard origin/"$(git rev-parse --abbrev-ref HEAD)"
}
# 用法: gresetremote
.bashrc
或 .zshrc
如果你希望這些函數和別名能在不同的終端會話中持續存在,你需要將它們添加到你的 .bashrc
或 .zshrc
。這裡是如何做的:
nano ~/.bashrc # 或 ~/.zshrc
source ~/.bashrc # 或 ~/.zshrc
這些只是讓 Git 為你工作,而不是你為 Git 工作的方式之一。只需花幾分鐘調整你的 shell 設置,你就可以節省大量的鍵入和點擊時間。那麼你呢?
原文出處:https://dev.to/jimmymcbride/why-i-bash-git-and-why-you-should-too-3752