2017-02-27 82 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

尼斯。很酷。 –