Gerrit recreating change-ids
Asked Answered
R

3

18

I am using gerrit. I used the following command

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

This adds the change-id to my commit message, however if I amend to a commit it creates a NEW change-id. So when I push back to gerrit it's not adding the patch set, it's creating a whole new review entry.

Any suggests please?

Found the answer, but stackoverflow won't let me answer my own question.

So this was a complete error on my part. When I was trying to commit git commit --amend -m "Initial Commit"

I was inlining the commit message and that was wiping away the change-Id, thus giving me a new one.

Roadwork answered 25/10, 2011 at 18:12 Comment(2)
Are you sure that the ChangeId is in the last paragraph of the commit message? Have a look at: ChangeIdPatriarchate
Mmmm, I have just finished reading your question :-) and yes, the -m is a typical error.Patriarchate
G
35

commit-msg hook work that way:

  1. Check if you have change-id in your commit message.
  2. If not, generates one.

If you type git commit --amend and edit commit message, you still have old change-id (it is good).

But if you type git commit --amend -m "...." you have removed change-id, so gerrit generates new one.

Rule of a thumb: Don't use --amend -m with gerrit.

Greasewood answered 5/12, 2011 at 22:2 Comment(3)
If you really wanted to, one could write a prepare-commit-msg hook that would squirrel away the changeid and then put it back on.Nurseryman
Yikes! found this too late :)Unused
--ammend and -m do work ... you just have to remember to to a git rebase --interactive before pushing - to cleanup things. And of course, you have to make sure to not change the change id when doing so ;-)Broadnax
M
8
  1. git commit --amend
  2. Manually delete the Change-Id line, save and close
  3. git commit --amend --no-edit

And the hook will create a new Change-Id hash, in the absence of one.

Masterful answered 15/5, 2019 at 12:55 Comment(1)
That is in fact the easiest way to re-generate change-id, and shall be accepted as a correct wayWeitzel
S
1

If git commit --amend or git commit --amend -m "...." doesn't help and gerrit still complains about the missing change-Id. (This happens due to network issues mostly)

This is how I got it resolved (Made sure I had the commit-msg hook applied, on parent directory of the checked-out directory reference):

  1. Stash the Changes using git stash.
  2. Used gitk & to hard rebase the change to just previous commit. enter image description here
  3. Then pull and rebase from Repo git pull --rebase.
  4. Then apply the stashed changes using git stash apply, reference. Resolve Merger Conflicts if any using git mergetool.
  5. Recommitted in the change again using git commit or git commit --amend, this generated a new change-Id
  6. Push the changes to branch on repository using git push ... command.

There is similar question around as well for reference

Stansberry answered 26/8, 2015 at 2:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.