2016-03-29 19 views
0

基本的に、フィルタブランチがすでにプッシュされているコミットを変更する場合は、警告を出したいと思います。git:filter-branchがすでにコミットされているコミットになるか確認してください。

は、私はすでにプッシュされ、すべてのハッシュのリストでこれを削り取っ影響を受けたハッシュと「COMM」のリストを作成することができます。もちろん、

git filter-branch ... --ancestry-path A^..HEAD 

をしたいとします。もっと簡単な解決策がありますか?

編集:私はスクリプト可能なソリューションに興味があります。

+1

許可を求めるよりも、それは許しを依頼する方が簡単ですかしら:ちょうど変更を加えると 'Gitのpush'を試してみて、それが失敗した場合、元に戻します'filter-branch'の変更です。 – larsks

+0

即時の 'A ^'子のみをチェックするだけでは不十分ですか? (私があなたのケースを正しく理解していれば、それは 'A'でなければなりません)。彼らがプッシュされていない場合、それらの上のコミットのどれもプッシュされていません – max630

+0

@ max630:しかし、彼らはこれまでプッシュされていないことを証明する方法は? (現在登録されているリモコンに関して) – Henning

答えて

0

あなたが先にmaster(または、あなたが取り組んでいるものは何でもブランチ)のだとあなたがgit statusを実行すると仮定すると、あなたはこのような何かわかります

Your branch is ahead of 'origin/master' by 1 commit. 

を行うための最も簡単な方法は、ちょうどあなたを実行していますfilter-branchを実行し、再度statusを実行します。いずれの変更も既にプッシュされたコミットに影響しない場合、メッセージは変更されません。あなたが救済したい場合は、filter-branchを実行し、git reset --hard SHAとそれに戻って得ることができる前からコミットSHAを保存

Your branch and 'origin/master' have diverged, 
and have 1 and 1 different commit each, respectively. 

:あなたがプッシュされた何かを変更しなかった場合、メッセージは次のようになります

0

私はスクリプト可能なソリューションを探していたはずです。私の現在のソリューションは非常に重く、すべての状況で動作しない可能性があります:

#!/bin/bash 

COMMIT="$1" 

git log --format="%H %h %s" --ancestry-path $COMMIT"^.." | \ 
grep -f \ 
    <(comm -12 \ 
    <(git log --format=%H --ancestry-path $COMMIT"^.." | sort) \ 
    <(git log --format=%H $(git for-each-ref --format="%(refname)" refs/remotes/) | sort)\ 
) | \ 
cut -d " " -f 2- | grep "." && { echo 'Some already pushed commits are affected!'; exit 1; } 

git filter-branch ... --ancestry-path $COMMIT"^.." 
関連する問題