使用 git push
時,有時會不小心推錯分支!
你不想確認一下當前的分支嗎?
這時候,就請讓金城武幫你說「等一下」。
這篇文章將利用 Git 內建的 git hooks 解決方案。
※ 本文將省略 git hooks 的詳細說明。
Git 鉤子是一個用於在執行 Git 命令的前後執行特定腳本的機制。
例如,使用叫做 pre-commit 的 Git 鉤子,可以在執行 git commit 之前執行任意腳本。利用這個特性,可以檢查提交訊息中是否包含問題或票證的編號,若未包含則中止提交等處理。
https://qiita.com/noraworld/items/c562de68a627ae792c6c
上述文章,解釋得非常清楚。
本文將利用 git hooks 的 pre-push 鉤子來啟動「等一下」的提示。
當執行 git push 時,此鉤子在遠端引用更新後、物件傳輸開始前執行。此鉤子接受遠端的名稱和位置作為參數,並從 stdin 接收即將更新的引用列表。此鉤子可用於在進行推送之前檢查將要更新的引用(若返回非零值則推送會中斷)。
https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%83%95%E3%83%83%E3%82%AF#:~:text=%E4%BD%BF%E3%81%88%E3%81%BE%E3%81%99%E3%80%82-,pre%2Dpush%20%E3%83%95%E3%83%83%E3%82%AF,-%E3%81%AF%E3%80%81%20git
※ 會提供在版本庫中的設定方法,而非全局設定。
※ 關於全局設定,請參考以下文章。
請使用 cd 等命令進入。
.git/hooks
使用 find
命令確認,應該可以看到以下檔案。
$ find .git/hooks
.git/hooks
.git/hooks/commit-msg.sample
.git/hooks/pre-rebase.sample
.git/hooks/sendemail-validate.sample
.git/hooks/pre-commit.sample
.git/hooks/applypatch-msg.sample
.git/hooks/fsmonitor-watchman.sample
.git/hooks/pre-receive.sample
.git/hooks/prepare-commit-msg.sample
.git/hooks/post-update.sample
.git/hooks/pre-merge-commit.sample
.git/hooks/pre-applypatch.sample
.git/hooks/pre-push.sample # 本次將使用此檔案。
.git/hooks/update.sample
.git/hooks/push-to-checkout.sample
移除 sample 擴展名。
mv .git/hooks/pre-push.sample .git/hooks/pre-push
編輯 .git/hooks/pre-push
#!/bin/sh
# 取得當前的分支名稱
current_branch=$(git rev-parse --abbrev-ref HEAD)
echo >&2 "------------------------------------------------------------------------"
echo >&2 "等一下。要推送分支 (${current_branch}) 嗎? (y/n): "
echo >&2 "------------------------------------------------------------------------"
read -r answer < /dev/tty
if [ "$answer" != "y" ]; then
echo >&2 "已中止推送。"
exit 1
fi
# 若輸入為 "y",則繼續推送
exit 0
※ 我對 shell 不太在行,抱歉。使用時請在您自己的環境中測試。
※ 「等一下。」這句話不是強制性的。
chmod +x .git/hooks/pre-push
※ 根據環境,有時可能不需要此步驟。
git push
------------------------------------------------------------------------
等一下。要推送分支 (kimutaku/come-on) 嗎? (y/n):
------------------------------------------------------------------------
y
Everything up-to-date
運作得不錯呢。
果然能即時目視確認分支名稱讓人安心。
雖然導入的時間不長,但我感覺可以減少誤操作。
根據想法,似乎不僅僅能確認分支,還能做更多事情。
「等一下」這句確認訊息,
由於我還是會不小心忘記更改,於是我決定暫時與金城武一起開發。
原文出處:https://qiita.com/umekikazuya/items/6d92fb70bf3c709ceb52