57

リモートリポジトリにブランチを設定し、そのブランチでいくつかのコミットを行いました。次に、リモートブランチをリモートマスターにマージします。

基本的に以下は私の操作です:

  1. チェックアウトブランチ
  2. チェックアウトマスター
  3. ブランチをマージし、マージエラーを修正します
  4. 専念
  5. プッシュオリジンHEAD:refs / for / master

ただし、5番目のステップでエラーメッセージが表示されます。

remote: Resolving deltas:   0% (0/12)

remote: ERROR: missing Change-Id in commit message
...

remote: Change-Id: I55862204ef71f69bc88c79fe2259f7cb8365699a

To ssh://prc@test.gerrit.xxx.com:29418/hello_git
 ! [remote rejected] HEAD -> refs/for/master (missing Change-Id in commit message)
4

13 に答える 13

91

コミットの説明に含まれているかどうかを確認Change-Id: ...してください。すべてのコミットにそれらが必要です。

いいえの場合は、を使用git rebase -iしてコミットメッセージを言い換え、適切な変更IDを追加します(通常、これはレビューされたコミットの最初のバージョンのSHA1です)。

将来的には、必要なChange-Idを自動的に追加するcommitフックをインストールする必要があります。

scp -p -P 29418 username@your_gerrit_address:hooks/commit-msg .git/hooks/リポジトリディレクトリで 実行するか、ダウンロードしhttp://your_gerrit_address/tools/hooks/commit-msgて.git/hooksにコピーします

于 2012-01-13T11:13:03.103 に答える
28

これを試して:

git commit --amend

Change-Id: I55862204ef71f69bc88c79fe2259f7cb8365699a次に、ファイルの最後にをコピーして貼り付けます。

保存してもう一度プッシュしてください。

于 2013-06-11T04:01:46.200 に答える
7

複数のコミットにChange-Idを追加する必要がある場合は、Gerritサーバーからフックをダウンロードし、これらのコマンドを実行して、一度に変更IDを必要とするすべてのコミットにChange-Idを追加できます。以下の例では、アップストリームブランチにまだプッシュされていない現在のブランチのすべてのコミットを修正します。

tmp=$(mktemp)
hook=$(readlink -f $(git rev-parse --git-dir))/hooks/commit-msg
git filter-branch -f --msg-filter "cat > $tmp; \"$hook\" $tmp; cat $tmp" @{u}..HEAD
于 2014-09-12T20:52:41.453 に答える
5

これは、GerritがコミットメッセージでChange-Idを要求するように構成されているためです。

http://gerrit.googlecode.com/svn-history/r6114/documentation/2.1.7/error-missing-changeid.html

プッシュするすべてのコミットのメッセージを変更して、変更ID(を使用git filter-branch)を含めてから、プッシュする必要があります。

于 2012-01-13T04:30:51.250 に答える
2

あなたは、に直接1回限りのプッシュを行う管理者である可能性がありますrefs/changes/<change_number>

たとえば、Change-IdのないコミットがSubversionに到達したら、git-svnを使用してSubversionからプルし、GerritパッチセットとしてGerrit変更にアーカイブしたいとします。

その場合は、プロジェクト設定ページ(http:// [installation-path] /#/ admin / projects / [project-id])に移動し、「コミットメッセージに変更IDを要求する」の値を一時的にFalseに変更できます。

後でそれをInheritまたはTrueに戻すことを忘れないでください!

于 2015-07-13T01:16:17.100 に答える
2

コミットする前にgitリポジトリを確認してください

gitrepo/.git/hooks/commit-msg

このファイルがその場所に存在しない場合は、「コミットメッセージにChange-Idがありません」というエラーが表示されます。

これを解決するには、コミットフックを.gitフォルダーにコピーして貼り付けます。

于 2015-07-22T11:49:52.140 に答える
2

以下の2つの手順に従う必要があります。

[問題]リモート:ヒント:Change-Idを自動的に挿入するには、フックをインストールします。

1)gitdir=$(git rev-parse --git-dir);

2)scp -p -P 29418 <username>@gerrit.xyz.se:hooks/commit-msg ${gitdir}/hooks/

通常、$ gitdir=".git"です。ユーザー名とGerritリンクを更新する必要があります。

于 2018-04-30T13:26:09.567 に答える
2

1) gitdir=$(git rev-parse --git-dir);

2) scp -p -P 29418 <username>@gerrit.xyz.se:hooks/commit-msg ${gitdir}/hooks/

a)Windowsでステップ1を実行する方法がわからないため、スキップしてハードコードされたパスを使用しましたstep 2 scp -p -P 29418 <username>@gerrit.xyz.se:hooks/commit-msg .git/hooks/

b)以下のエラーが発生した場合は、.gitフォルダーに「hooks」ディレクトリを手動で作成します

protocol error: expected control record

c)サブモジュールがある場合、たとえば「XX」の場合は、そこでも手順2を繰り返す必要があります。今回は、${gitdir}をそのサブモジュールパスに置き換えます。

d)scpがウィンドウで認識されない場合は、scpのフルパスを指定してください

"C:\Program Files\Git\usr\bin\scp.exe"

e).gitフォルダーはプロジェクトリポジトリに存在し、隠しフォルダーです

于 2018-08-09T04:29:21.843 に答える
0

.git / hooksフォルダーの下に、いくつかのサンプルファイルがありませんでした。commit-msg、post-commit.sample、post-update.sampleのように...これらのファイルを追加すると、変更IDが見つからないという問題が解決しました。

于 2018-10-29T10:38:54.800 に答える
0

デフォルトでは、Change-Idが指定されていない場合、Gerritはレビューのプッシュを防ぎます。Change-Idは、クライアント側のコミットメッセージのフッターに追加されます。最初にcommit-msgスクリプトをダウンロードしてセットアップする必要があります。詳細については、Gerritsのドキュメントをご覧ください。

git clone ssh://gerrithost:29418/RecipeBook.git RecipeBook
scp -p -P 29418 gerrithost:hooks/commit-msg RecipeBook/.git/hooks/
chmod u+x .git/hooks/commit-msg
于 2022-01-10T11:17:58.133 に答える
-1

私もこのエラーメッセージを受け取りました。

そして、ここで答えを出すことが有用だと私が思うのは、@RafałRawickiからの答えが、すべての状況ではなく、場合によっては良い解決策であるということです。私が会った例:

1.run "git log" we can get the HEAD commit change-id

2.we also can get a 'HEAD' commit change-id on Gerrit website.

3.they are different ,which makes us can not push successfully and get the "missing change-id error"

解決:

0.'git add .'

1.save your HEAD commit change-id got from 'git log',it will be used later.

2.copy the HEAD commit change-id from Gerrit website.

3.'git reset HEAD'

4.'git commit --amend' and copy the change-id from **Gerrit website** to the commit message in the last paragraph(replace previous change-id)

5.'git push *' you can push successfully now but can not find the HEAD commit from **git log** on Gerrit website too

6.'git reset HEAD'

7.'git commit --amend' and copy the change-id from **git log**(we saved in step 1) to the commit message in the last paragraph(replace previous change-id)

8.'git push *' you can find the HEAD commit from **git log** on Gerrit website,they have the same change-id

9.done
于 2013-12-04T08:15:18.267 に答える
-1

今朝、リポジトリのクローンを作成し、変更を再適用することで、この問題を解決しました。これは、ローカルコピーをGerritと再同期する最も簡単な方法です。いつものように、最初にバックアップを作成しました。

他にも非常に複雑な解決策がいくつかありますが、事態を悪化させないように単純なアプローチを取ることがしばしば有利です。

于 2014-09-09T14:14:16.717 に答える
-1

これは、次の制限がある場合にも発生する可能性があります。

変更のコミットメッセージを入力してください。'#'で始まる行は無視され、空のメッセージはコミットを中止します。

そして、あなたは私が好きです:「#」で始まるコミットメッセージを書いてください....。

同じエラーが発生しましたが、すでにcommit-msgrebaseおよびすべてを実行しました。非常にばかげた間違いですが:D

于 2016-02-27T02:53:12.370 に答える