介绍

在团队中使用 Git 时,经常会出现需要撤消最后一次提交的需求,对于程序员来说很简单,但是对于非程序员就太困难了。

因为实际处理时要考虑提交是否已推送,已推送的提交无法撤消。

环境

  • Windows 10
  • Git 2.12.0

解决方案

撤消提交脚本

这种是否已推送的情况可以使用脚本检查,因此编写脚本可以暴露出简单的接口,同时隔离复杂的实现。

将以下内容保存为脚本 Tools/Git/Reset.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#!/bin/bash

set -e

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

UNPUSHED=`git -C $DIR cherry`

if [[ -n $UNPUSHED ]]
then
    git -C $DIR reset --soft head~
    echo '成功撤消一个未推送的提交'
else
    echo '无提交可撤消'
fi

read -n 1 -s -r -p "按任意键继续..."

桌面快捷方式

将以下内容保存为脚本 setup.bat

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
echo "Create Reset shortcut on Desktop"

set DIR=%~dp0
CALL :SHORTCUT Reset %DIR%Tools/Git/Reset.sh
pause
GOTO :EOF

:SHORTCUT
set SCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"

echo Set oWS = WScript.CreateObject("WScript.Shell") >> %SCRIPT%
echo sLinkFile = "%USERPROFILE%\Desktop\%1.lnk" >> %SCRIPT%
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> %SCRIPT%
echo oLink.TargetPath = "%2" >> %SCRIPT%
echo oLink.Save >> %SCRIPT%

cscript /nologo %SCRIPT%
del %SCRIPT%
GOTO :EOF

使用方法

  1. 由于使用 bash 脚本实现此功能,需要在安装 Git 时勾选 sh 文件关联,如果之前已安装过可以重装。
  2. 将脚本保存后提交到仓库中。
  3. 其他人使用时需要执行初始化脚本 setup.bat 在桌面创建快捷方式,方便使用。

实践结果

在 Windows 上使用非常方便,不用去介绍如何在 GUI 中选中上一次提交并在右键菜单中点击重置,只要双击就可以,完全自动化、傻瓜化。