Gitは

2016-03-18 15 views
1

が適切にこのエイリアスの仕事をする上でいくつかの助けをご希望正常に動作していないエイリアスを元に戻す:Gitは

[alias] 
    undo = "!f() { git reset --hard [email protected]{$1-1}; }; f" 
目標が実行できるようにすることです

:パラメータを持たない

git undo、それがに戻すしています前アクション(ヘッド@ {1})

git undo 2は、私はそれを実行すると、私はTが表示されませんバック2の前アクションに

をロールになります彼は行動を期待:

gitが

致命的な元に戻す:あいまいな引数 'のHEAD @ { - 1}':不明なリビジョンまたはパスではありません で作業ツリー。使用 ' - ' リビジョンからのパスを分離するために、 次のように: 'gitの[...] - [...]'

gitの2

警告元に戻す:ログを「HEAD」は金曜日、2016年3月18日12:00:10 -0700にのみ戻ります。警告:「HEAD」のログは2016年3月18日12:00:10 -0700にのみ戻っています。

66b5b26のHEAD @ {0}::リセット:{2-1}

HEADの@に移動HEADは初期66b5b26が最新REFLOGエントリが表示さ git undo 2を呼び出した後

をコミット時になりました

このエイリアスを正しく設定するにはどうすればよいですか?

答えて

1

私はあなたが、あなたはそれがこのように振る舞うしたい理解していた場合:

git undo     # [email protected]{1} 
git undo 1    # [email protected]{1} 
git undo 5    # [email protected]{5} 

その後、私はbashやzshのようなシェルを想定し、これは動作するはずと信じて:

undo = "!f() { git reset --hard [email protected]{${1-1}}; }; f" 

したい場合それが何もせずに何をするかを見るには、echoをエイリアスのgit resetの前に貼ってください。

another answerに記載されているように、ワーニングはここでも言及していますが、これは作業ディレクトリのローカル変更を静かに削除するので注意して使用してください。

+0

これは、感謝しました! – Scott

2

あなたが正確に何をしているかは完全にはっきりしていません。私はあなたがこれらの拡張を探していると仮定しています:

git undo ==> git reset --hard [email protected]{0} 
git undo 1 ==> git reset --hard [email protected]{0} 
git undo 2 ==> git reset --hard [email protected]{1} 
git undo 3 ==> git reset --hard [email protected]{2} 

それはあなたが探しているものなら、あなたはこのエイリアスはむしろ危険であることを

undo = "!f() { git reset --hard [email protected]{$((${1:-1} - 1))}; }; f" 

注意を使用することができます。それは、あなたの作業ディレクトリのすべてのローカル変更を静かに削除します。

+1

+1については、ローカルの変更を静かに落とすことに注意してください。私はおそらく、この点に基づいて続行する前に確認を求めるシェルスクリプトに変換します。 – Scott