gerrit/Documentation/error-squash-commits-first.txt
David Pursehouse 221d4f6250 Documentation: Various corrections
Correct typos, spelling mistakes, and grammatical errors.

Change-Id: I80ec66de7b2228f9ff45a2f06faf576707195758
2012-06-12 14:54:54 +02:00

109 lines
4.0 KiB
Plaintext

squash commits first
====================
With this error message Gerrit rejects to push a commit if it
contains the same Change-ID as a predecessor commit.
The reason for rejecting such a commit is that it would introduce, for
the corresponding change in Gerrit, a dependency upon itself. Gerrit
prevents such dependencies between patch sets within the same change
to keep the review process simple. Otherwise reviewers would not only
have to review the latest patch set but also all the patch sets the
latest one depends on.
This error is quite common, it appears when a user tries to address
review comments and creates a new commit instead of amending the
existing commit. Another possibility for this error, although less
likely, is that the user tried to create a patch series with multiple
changes to be reviewed and accidentally included the same Change-ID
into the different commit messages.
Example
-------
Here an example about how the push is failing. Please note that the
two commits 'one commit' and 'another commit' both have the same
Change-ID (of course in real life it can happen that there are more
than two commits that have the same Change-ID).
----
$ git log
commit 13d381265ffff88088e1af88d0e2c2c1143743cd
Author: John Doe <john.doe@example.com>
Date: Thu Dec 16 10:15:48 2010 +0100
another commit
Change-Id: I93478acac09965af91f03c82e55346214811ac79
commit ca45e125145b12fe9681864b123bc9daea501bf7
Author: John Doe <john.doe@example.com>
Date: Thu Dec 16 10:12:54 2010 +0100
one commit
Change-Id: I93478acac09965af91f03c82e55346214811ac79
$ git push ssh://JohnDoe@host:29418/myProject HEAD:refs/for/master
Counting objects: 8, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (6/6), 558 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
To ssh://JohnDoe@host:29418/myProject
! [remote rejected] HEAD -> refs/for/master (squash commits first)
error: failed to push some refs to 'ssh://JohnDoe@host:29418/myProject'
----
If it was the intention to rework on a change and to push a new patch
set the problem can be fixed by squashing the commits that contain the
same Change-ID. The squashed commit can then be pushed to Gerrit.
To squash the commits use git rebase to do an interactive rebase. For
the example above where the last two commits have the same Change-ID
this means an interactive rebase for the last two commits should be
done. For further details about the git rebase command please check
the link:http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html[Git documentation for rebase].
----
$ git rebase -i HEAD~2
pick ca45e12 one commit
squash 13d3812 another commit
[detached HEAD ab37207] squashed commit
1 files changed, 3 insertions(+), 0 deletions(-)
Successfully rebased and updated refs/heads/master.
$ git log
commit ab37207d33647685801dba36cb4fd51f3eb73507
Author: John Doe <john.doe@example.com>
Date: Thu Dec 16 10:12:54 2010 +0100
squashed commit
Change-Id: I93478acac09965af91f03c82e55346214811ac79
$ git push ssh://JohnDoe@host:29418/myProject HEAD:refs/for/master
Counting objects: 5, done.
Writing objects: 100% (3/3), 307 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://JohnDoe@host:29418/myProject
* [new branch] HEAD -> refs/for/master
----
If it was the intention to create a patch series with multiple
changes to be reviewed, each commit message should contain the
Change-ID of the corresponding change in Gerrit. If a change in
Gerrit does not exist yet, the Change-ID should be generated (either
by using a link:cmd-hook-commit-msg.html[commit hook] or by using EGit) or the Change-ID could be
removed (not recommended since then amending this commit to create
subsequent patch sets is more error prone). To change the Change-ID
of an existing commit do an interactive link:http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html[git rebase] and fix the
affected commit messages.
GERRIT
------
Part of link:error-messages.html[Gerrit Error Messages]