blob: b3b9d560d1f327782bbf092caed57c6ca9d32192 [file] [log] [blame]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001= squash commits first
Edwin Kempinefb5f9a2010-12-16 11:02:00 +01002
3With this error message Gerrit rejects to push a commit if it
4contains the same Change-ID as a predecessor commit.
5
6The reason for rejecting such a commit is that it would introduce, for
7the corresponding change in Gerrit, a dependency upon itself. Gerrit
8prevents such dependencies between patch sets within the same change
9to keep the review process simple. Otherwise reviewers would not only
10have to review the latest patch set but also all the patch sets the
David Pursehouse221d4f62012-06-08 17:38:08 +090011latest one depends on.
Edwin Kempinefb5f9a2010-12-16 11:02:00 +010012
13This error is quite common, it appears when a user tries to address
14review comments and creates a new commit instead of amending the
15existing commit. Another possibility for this error, although less
16likely, is that the user tried to create a patch series with multiple
17changes to be reviewed and accidentally included the same Change-ID
18into the different commit messages.
19
20
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -080021== Example
Edwin Kempinefb5f9a2010-12-16 11:02:00 +010022
23Here an example about how the push is failing. Please note that the
24two commits 'one commit' and 'another commit' both have the same
25Change-ID (of course in real life it can happen that there are more
26than two commits that have the same Change-ID).
27
28----
29 $ git log
30 commit 13d381265ffff88088e1af88d0e2c2c1143743cd
31 Author: John Doe <john.doe@example.com>
32 Date: Thu Dec 16 10:15:48 2010 +0100
33
34 another commit
35
36 Change-Id: I93478acac09965af91f03c82e55346214811ac79
37
38 commit ca45e125145b12fe9681864b123bc9daea501bf7
39 Author: John Doe <john.doe@example.com>
40 Date: Thu Dec 16 10:12:54 2010 +0100
41
42 one commit
43
44 Change-Id: I93478acac09965af91f03c82e55346214811ac79
45
46 $ git push ssh://JohnDoe@host:29418/myProject HEAD:refs/for/master
47 Counting objects: 8, done.
48 Delta compression using up to 2 threads.
49 Compressing objects: 100% (2/2), done.
50 Writing objects: 100% (6/6), 558 bytes, done.
51 Total 6 (delta 0), reused 0 (delta 0)
52 To ssh://JohnDoe@host:29418/myProject
53 ! [remote rejected] HEAD -> refs/for/master (squash commits first)
54 error: failed to push some refs to 'ssh://JohnDoe@host:29418/myProject'
55----
56
57If it was the intention to rework on a change and to push a new patch
58set the problem can be fixed by squashing the commits that contain the
59same Change-ID. The squashed commit can then be pushed to Gerrit.
60To squash the commits use git rebase to do an interactive rebase. For
61the example above where the last two commits have the same Change-ID
62this means an interactive rebase for the last two commits should be
63done. For further details about the git rebase command please check
64the link:http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html[Git documentation for rebase].
65
66----
67 $ git rebase -i HEAD~2
68
69 pick ca45e12 one commit
70 squash 13d3812 another commit
71
72 [detached HEAD ab37207] squashed commit
73 1 files changed, 3 insertions(+), 0 deletions(-)
74 Successfully rebased and updated refs/heads/master.
75
76 $ git log
77 commit ab37207d33647685801dba36cb4fd51f3eb73507
78 Author: John Doe <john.doe@example.com>
79 Date: Thu Dec 16 10:12:54 2010 +0100
80
81 squashed commit
82
83 Change-Id: I93478acac09965af91f03c82e55346214811ac79
84
85 $ git push ssh://JohnDoe@host:29418/myProject HEAD:refs/for/master
86 Counting objects: 5, done.
87 Writing objects: 100% (3/3), 307 bytes, done.
88 Total 3 (delta 0), reused 0 (delta 0)
89 To ssh://JohnDoe@host:29418/myProject
90 * [new branch] HEAD -> refs/for/master
91----
92
93If it was the intention to create a patch series with multiple
David Pursehouse221d4f62012-06-08 17:38:08 +090094changes to be reviewed, each commit message should contain the
95Change-ID of the corresponding change in Gerrit. If a change in
Edwin Kempinefb5f9a2010-12-16 11:02:00 +010096Gerrit does not exist yet, the Change-ID should be generated (either
97by using a link:cmd-hook-commit-msg.html[commit hook] or by using EGit) or the Change-ID could be
98removed (not recommended since then amending this commit to create
99subsequent patch sets is more error prone). To change the Change-ID
100of an existing commit do an interactive link:http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html[git rebase] and fix the
101affected commit messages.
102
103
104GERRIT
105------
106Part of link:error-messages.html[Gerrit Error Messages]
Yuxuan 'fishy' Wang99cb68d2013-10-31 17:26:00 -0700107
108SEARCHBOX
109---------