关于git:Gerrit重新创建更改ID

Gerrit recreating change-ids

我正在使用Gerrit。 我使用以下命令

1
2
3
$ cd .git/hooks
$ scp -P 29418 demo@localhost:hooks/commit-msg .
$ cd ../..

这会将更改ID添加到我的提交消息中,但是,如果我修改了提交,它将创建一个新的更改ID。 因此,当我回过头使用Gerrit时,它没有添加补丁集,而是在创建一个全新的评论条目。

有什么建议吗?

找到了答案,但是stackoverflow不会让我回答自己的问题。

所以这对我来说是一个完全错误。
当我尝试提交时
git commit --amend -m"初始提交"

我内联了提交消息,这消除了change-Id,从而给了我一个新的。


commit-msg钩子工作方式如下:

  • 检查提交消息中是否具有更改ID。
  • 如果不是,则生成一个。
  • 如果键入git commit --amend并编辑提交消息,则您仍具有旧的change-id(很好)。

    但是,如果键入git commit --amend -m"....",则删除了change-id,因此gerrit会生成新的。

    经验法则:
    请勿将--amend -m与gerrit一起使用。


    如果git commit --amendgit commit --amend -m"...."没有帮助,并且gerrit仍然抱怨缺少更改ID。 (这种情况的发生主要是由于网络问题)

    这是解决问题的方法(确保在检出目录参考的父目录上应用了commit-msg钩子):

  • 使用git stash存储更改。
  • gitk &用于将更改硬性地重新设置为仅先前的提交。
    enter image description here
  • 然后从回购git pull --rebase中拉出并重新设置基础。
  • 然后使用git stash apply(参考)应用隐藏的更改。
    如果使用git mergetool解决合并冲突(如有)。
  • 再次使用git commitgit commit --amend重新提交更改,这生成了一个新的change-Id
  • 使用git push ...命令将更改推送到存储库上的分支。
  • 周围也有类似的问题供参考


  • git commit --amend
  • 手动删除Change-Id行,保存并关闭
  • git commit --amend --no-edit
  • 在没有一个钩子的情况下,该钩子将创建一个新的Change-Id哈希。