使用 git hooks 来防止忘记回复 [Git] stash
序言
你们使用过git stash吗?简单来说,这是一个可以将还未提交或添加的工作中的更改内容暂存起来的命令。
关于git stash的简明解释在这里【git stash】当你想退避更改而不进行提交时- Qiita
典型的情况如下。
-
- 作業中に急な対応等で別の作業ブランチに移動したい
-
- しかし、やりかけの作業が邪魔をしてブランチの移動ができない
- まだ中途半端な状態だからコミットはしたくない
在这种情况下,执行 git stash 命令会将正在进行的更改暂存起来。因此,可以先处理其他分支的需求,然后切回原来的工作分支,并恢复之前暂存的更改,就可以回到最初的状态。
问题所在
虽然 git stash 很方便,但有一个麻烦的问题。
有时会忘记恢复保存的更改。
执行git stash后,git status的状态将变为”nothing to commit, working tree clean”,也就是说,显示的状态与没有任何变更的情况相同。这样一来,就容易忘记执行了git stash。
毫無疑問地,git stash後我會記得,但當我切換到其他分支或者忙於其他工作,並且時間較長,我就會相當容易地忘記了。
答案
我认为最容易忘记的主要原因是无论是否进行git stash,外观上几乎没有区别。那么,如果我们根据外观进行解决,岂不是可以解决这个问题吗?
因此,雖然前言有點長,但今天我想分享一下,當我使用 git stash 指令時,如何在屏幕上顯示它,以防止忘記還原更改的方法。
已确认操作环境
-
- git version 2.23.0
- git version 2.11.0.windows.3
我正在使用 GitBash 在 Windows 上进行确认。
引入程序
我使用githooks。
使用它,可以执行与Git特定操作触发的脚本。
这次的情况下,我打算创建一个脚本,它在执行git checkout时触发。原因是,我希望在完成分支切换后,屏幕上显示有stash存在的消息,这样我就不容易忘记它们了,因为这个时机是我想知道正在保存stash的时刻。
所以,我们要创建一个以git checkout为触发的脚本,该脚本负责在屏幕上显示stash的存在与否作为目标。
在git checkout之后立即执行的名为post-checkout的hook非常适合我们的需求,毫不犹豫地决定使用它。
创建结账后操作
當移動到開發中的存儲庫的根目錄下時,按照以下步驟在.git/hooks目錄下創建post-checkout文件。不需要文件擴展名。
# 新規作成
touch .git/hooks/post-checkout
# 実行権限を付与(755じゃなくても実行さえできればなんでもよい)
chmod 755 .git/hooks/post-checkout
安装钩子中的内容
实现一个脚本,可以检查存储库的存在与否并输出结果。请编辑之前创建的 post-checkout 文件如下。
#!/bin/bash
STASH_LIST=$(git stash list)
if [ -n "$STASH_LIST" ]; then
echo ''
echo -e "\033[1;31;239m`echo $STASH_LIST | wc -l | xargs echo` stashed works found.\033[0m"
echo -e 'Please exec \033[1m`git stash list`\033[0m command to check the stashed works detail.'
fi
准备工作已完成。
使用示例
在执行git checkout命令时,根据是否存在stash,外观会发生以下变化。如果没有stash,外观与以前一样,没有特别变化。如果存在stash,将显示stash的数量。
当暂存品箱里没有任何东西时。

当有一个藏匿点

心得
由于git hooks的帮助,我意外地很容易实现了想做的事情。仅仅这样我相信会减少很多未回退stash的疏忽。如果你感兴趣的话,请务必试一试。
请参考
-
- 【git stash】コミットはせずに変更を退避したいとき – Qiita
- Git – githooks Documentation