【问题标题】:Gerrit recreating change-idsGerrit 重新创建更改 ID
【发布时间】:2011-10-25 18:12:47
【问题描述】:

我正在使用 gerrit。我使用了以下命令

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

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

有什么建议吗?

找到了答案,但 stackoverflow 不允许我回答我自己的问题。

所以这完全是我的错误。 当我试图提交 git commit --amend -m "初始提交"

我正在内联提交消息,并且正在擦除更改 ID,从而给了我一个新的。

【问题讨论】:

  • 你确定 ChangeId 在提交信息的最后一段吗?看看:ChangeId
  • 嗯,我刚刚读完你的问题 :-) 是的,-m 是一个典型的错误。

标签: git gerrit


【解决方案1】:

commit-msg 钩子就是这样工作的:

  1. 检查您的提交消息中是否有更改 ID。
  2. 如果没有,则生成一个。

如果您输入 git commit --amend 并编辑提交消息,您仍然有旧的更改 ID(这很好)。

但是如果你输入git commit --amend -m "...."你已经删除了change-id,所以gerrit会生成一个新的。

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

【讨论】:

  • 如果你真的想要,可以编写一个 prepare-commit-msg 钩子,将 changeid 隐藏起来,然后再放回去。
  • 哎呀!发现太晚了:)
  • --ammend 和 -m 确实有效......你只需要记住在推送之前git rebase --interactive - 来清理东西。当然,您必须确保这样做时不要更改更改 ID ;-)
【解决方案2】:
  1. git commit --amend
  2. 手动删除Change-Id行,保存并关闭
  3. git commit --amend --no-edit

并且钩子会在没有的情况下创建一个新的 Change-Id 哈希。

【讨论】:

  • 这实际上是最简单的重新生成change-id的方法,应该被接受为正确的方法
【解决方案3】:

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

这就是我解决它的方法(确保我已在签出目录reference 的父目录上应用了 commit-msg 挂钩):

  1. 使用git stash 存储更改。
  2. 使用gitk & 将更改硬变基为之前的提交。
  3. 然后从 Repo git pull --rebase 拉取和变基。
  4. 然后使用git stash applyreference 应用隐藏的更改。 使用git mergetool 解决合并冲突(如果有)。
  5. 使用git commitgit commit --amend 再次在更改中重新提交,这会生成一个新的更改ID
  6. 使用git push ... 命令将更改推送到存储库上的分支。

也有类似的问题for reference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 2011-01-19
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2017-06-18
    相关资源
    最近更新 更多