Git:在变基期间防止提交

6
我知道如何轻松“修复”这种状态,当我在交互式rebase期间不小心执行了git commit --amend。但我想知道是否有任何解决方案,无论复杂程度如何,都可以让我配置git/终端/bash来防止我执行此操作。
我只是使用Mac OSX终端。如果解决方案需要,我也可以尝试其他终端程序。
1 @: master$ git pull
2 @: master$ git checkout my/feature/branch
3 @: my/feature/branch$ git rebase -i master
// There are merge conflicts
// I fix them, then
4 @: my/feature/branch$ git add .
// Then what I should do is:
5correct @: my/feature/branch$ git rebase --continue
// But instead, just due to dumb muscle memory, I do:
5incorrect @: my/feature/branch$ git commit --amend

我可以轻易地修复破碎的结果状态。我只是试图找出是否有一种方法可以配置某些东西来防止我在重新基础时执行5次错误的命令。


3
并不是真的。你可以使用bash别名来运行除git之外的其他东西,当你输入git ...时,在那个别名/函数/脚本中,检查你是否在一个变基中,以及你是否想允许一些其他的命令——但是在交互式变基期间进行修改和/或额外提交是正常的,以拆分提交。(提示:在bash中的一个技巧是,command foo会运行实际的foo而不是你的别名,因此需要在需要时在你的别名中使用它。) - torek
1个回答

6
您可以将以下本地 pre-commit 钩子添加为 .git/hooks/pre-commit:
#!/bin/bash
set -e
shopt -s extglob

if [[ -d `git rev-parse --git-path rebase-merge` \
   || -d `git rev-parse --git-path rebase-apply` ]]; then
  read -p 'Rebase in progress, continue? '
  [[ ${REPLY,,} == @(y|yes) ]]
fi

只需执行chmod +x .git/hooks/pre-commit,然后就完成了。如果正在进行变基操作,则会提示您继续或按ctrl-c或回车键或其他方便您的方式停止脚本/提交。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接