1

次のbashスクリプトがあります:

git merge --squash -Xtheirs dev -m "squashing" && 
(./test/testsrc/shell/node-c.sh && echo "compiled successfully") || (git reset --hard; exit 1)

2 つの質問があります。

  1. マージが失敗した場合、マージ開始前の状態に戻すために git reset を実行する必要がありますか?
  2. 1 に対する答えが「はい」であると仮定すると、上記のスクリプトは正しく、node-c.sh スクリプトがゼロ以外のコードで終了した場合、その git reset --hard が呼び出され、コード = で完全に終了します。 1?

git merge を実行すると、インデックスは常に更新されるので、 git reset --hard は常に正しいことだと考えています。

余談ですが、Git の悪いバグのように見えるものを見ています。マージが機能せず、破損した .js ファイルが生成され、「$ node -c」でコンパイルすることさえできないことがよくあります。誰かがこれを以前に見たかどうかはわかりませんが、Git にバグレポートを提出しました。

4

2 に答える 2

1

スクリプトでは、実際にこれを行う必要があります。

git merge --squash -Xtheirs dev -m "squashing" && 
(./test/testsrc/shell/node-c.sh && echo "compiled successfully") ||
(git reset --hard ORIG_HEAD; exit 1)

マージnode-c.shが成功しても失敗した場合、望ましくないマージ コミットがあります。疑似参照ORIG_HEADは、最新のマージが開始されたときの場所を指します。マージが失敗した場合は と同じでHEADあり、成功した場合は と同じHEAD^です。

于 2016-12-15T22:01:44.123 に答える