Gerritを使用しています。次のコマンドを使用しました
$ cd .git/hooks
$ scp -P 29418 demo@localhost:hooks/commit-msg .
$ cd ../..
これにより、変更IDがコミットメッセージに追加されますが、コミットを修正すると、新しい変更IDが作成されます。したがって、Gerritにプッシュバックすると、パッチセットが追加されず、まったく新しいレビューエントリが作成されます。
何か提案がありますか?
答えは見つかりましたが、stackoverflowでは自分の質問に答えることができません。
だから、これは私の側の完全なエラーでした。 git commit --amend -m "InitialCommit"をコミットしようとしたとき
私はコミットメッセージをインライン化していましたが、それはchange-Idを一掃し、新しいものを与えてくれました。
commit-msgフックはそのように機能します:
git commit --amend
と入力してコミットメッセージを編集すると、古いchange-idが残っています(これは良いことです)。
ただし、git commit --amend -m "...."
と入力すると、change-idが削除されたため、gerritは新しいIDを生成します。
経験則:--amend -m
をgerritと一緒に使用しないでください。
git commit --amend
またはgit commit --amend -m "...."
が役に立たず、gerritが変更IDの欠落について不平を言う場合。 (これは主にネットワークの問題が原因で発生します)
これが私がそれを解決した方法です(チェックアウトされたディレクトリの親ディレクトリにcommit-msgフックが適用されていることを確認してください 参照 ):
git stash
を使用して変更を隠します。gitk &
を使用して、変更を直前のコミットにハードリベースしました。 git pull --rebase
からプルしてリベースします。git stash apply
、 参照 を使用して、隠された変更を適用します。 git mergetool
を使用して、合併の競合があれば解決します。git commit
またはgit commit --amend
を使用して変更を再度コミットすると、新しい変更IDが生成されますgit Push ...
コマンドを使用して、変更をリポジトリのブランチにプッシュします。周りにも同様の質問があります 参照用
git commit --amend
git commit --amend --no-edit
そして、フックがない場合、フックは新しいChange-Idハッシュを作成します。