2017-02-27 85 views
3

期间,我知道如何轻松地“修复”这种状态下,当我一个互动变基中不小心做了git commit --amend。但我想知道是否有人有一个解决方案,任何复杂程度的水平,这将允许我配置git/terminal/bash以防止我能够做到这一点。混帐:防止提交衍合

我只是在使用Mac OS X的终端。如果解决方案需要他们,我会接受其他终端程序。

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 

我可以很容易地修复损坏的结果状态。我只是想弄清楚是否有一种方法可以配置一些东西,以防止我能够执行5incorrect命令,如果我处于rebase的中间。

+3

不是真的。您可以使用一个bash别名跑得比'git'本身,当你进入'混帐以外的东西......',并在该别名/功能/脚本,检查你是否是一个重订,以及是否要允许其他一些命令 - 但它是正常的*在交互式rebase期间进行修改和/或额外的提交以分割提交。 (注:使用bash一个诀窍是,'命令foo'运行的实际富,而不是你的别名,所以你需要的时候使用* *在你的别名)。 – torek

回答

1

您可以添加以下本地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或只需输入或更方便,脚本/提交将会停止。

+0

尼斯。很酷。 –