为什么我不能签出另外两个更改并进行新的更改
Why can't I checkout another two changes and make a new one
我的团队正在使用 Gerrit。
现在,我和两个同事正在做一个项目。
两者都有git push
到Gerrit,也就是说在Gerrit上有两个独立的Changes。
现在,我需要获取他们的更改,将它们合并到我的本地项目中,并将新的更改推送到 Gerrit。
假设现有的两个更改是 A
和 B
。
在我的本地机器上,我执行以下操作:
git checkout master && git pull
git fetch ... refs/changes/xx/xxxxxx/x && git checkout FETCH_HEAD # checkout A from Gerrit
git switch -c br_a
git fetch ... refs/changes/xx/xxxxxx/y && git checkout FETCH_HEAD # checkout B from Gerrit
git switch -c br_b
现在,我有两个本地分支 br_a
和 br_b
,其中包含更改 A
和 B
。
然后我切换到我自己的本地分支,其中包含我自己的更改:git checkout br_c
。
之后,我执行 git merge br_a
和 git merge br_b
将 A
和 B
的更改合并到我的本地分支 br_c
中。 (我解决了所有的冲突。)
然后我需要将所有这些推送到 Gerrit。
所以我执行git commit
和git push origin HEAD:refs/for/master
.
但是,我得到了错误。
remote: Resolving deltas: 100% (26/26)
remote: Processing changes: refs: 1, done
remote:
remote: ERROR: In commit 1111111098b751266c11111222222a33ce0b83
remote: ERROR: author email address B@xxx.com
remote: ERROR: does not match your user account.
remote: ERROR:
remote: ERROR: The following addresses are currently registered:
remote: ERROR: me@xxx.com
remote: ERROR:
remote: ERROR: To register an email address, please visit:
remote: ERROR: http://gerrit.xxxx.yyyy.com/#/settings/contact
remote:
remote:
To http://gerrit.xxxx.yyyy.com/a/xxx_project
! [remote rejected] HEAD -> refs/for/master (invalid author)
error: failed to push some refs to 'http://gerrit.xxxx.yyyy.com/a/xxx_project'
B@xxx.com
是两位同事之一,所以 git merge
似乎将 A
and/or B
的一些元数据带入我的本地分支所以我不能推。
我试过 git commit --amend
,删除更改 ID and/or 重置作者和电子邮件,但这没有帮助。
Gerrit 有 2 个权限,Forge Author and Forge Committer。当您推送提交以供审核时,Gerrit 会验证作者电子邮件和提交者电子邮件是否与您在 Gerrit 用户名中注册的电子邮件地址相匹配。如果它们不匹配,则拒绝推送。您使用了 git merge
来应用提交。作者和提交者身份行未更改,并且与您的不匹配。所以推送失败。
这里有2个解决方案。一种是让Gerrit管理员给你2个权限,这样你就可以push别人的commit了。另一种是在不保留作者和提交者身份的情况下应用补丁,通过 git merge --squash
或 git cherry-pick -n
或 git apply
或手动修改文件。
我的团队正在使用 Gerrit。
现在,我和两个同事正在做一个项目。
两者都有git push
到Gerrit,也就是说在Gerrit上有两个独立的Changes。
现在,我需要获取他们的更改,将它们合并到我的本地项目中,并将新的更改推送到 Gerrit。
假设现有的两个更改是 A
和 B
。
在我的本地机器上,我执行以下操作:
git checkout master && git pull
git fetch ... refs/changes/xx/xxxxxx/x && git checkout FETCH_HEAD # checkout A from Gerrit
git switch -c br_a
git fetch ... refs/changes/xx/xxxxxx/y && git checkout FETCH_HEAD # checkout B from Gerrit
git switch -c br_b
现在,我有两个本地分支 br_a
和 br_b
,其中包含更改 A
和 B
。
然后我切换到我自己的本地分支,其中包含我自己的更改:git checkout br_c
。
之后,我执行 git merge br_a
和 git merge br_b
将 A
和 B
的更改合并到我的本地分支 br_c
中。 (我解决了所有的冲突。)
然后我需要将所有这些推送到 Gerrit。
所以我执行git commit
和git push origin HEAD:refs/for/master
.
但是,我得到了错误。
remote: Resolving deltas: 100% (26/26)
remote: Processing changes: refs: 1, done
remote:
remote: ERROR: In commit 1111111098b751266c11111222222a33ce0b83
remote: ERROR: author email address B@xxx.com
remote: ERROR: does not match your user account.
remote: ERROR:
remote: ERROR: The following addresses are currently registered:
remote: ERROR: me@xxx.com
remote: ERROR:
remote: ERROR: To register an email address, please visit:
remote: ERROR: http://gerrit.xxxx.yyyy.com/#/settings/contact
remote:
remote:
To http://gerrit.xxxx.yyyy.com/a/xxx_project
! [remote rejected] HEAD -> refs/for/master (invalid author)
error: failed to push some refs to 'http://gerrit.xxxx.yyyy.com/a/xxx_project'
B@xxx.com
是两位同事之一,所以 git merge
似乎将 A
and/or B
的一些元数据带入我的本地分支所以我不能推。
我试过 git commit --amend
,删除更改 ID and/or 重置作者和电子邮件,但这没有帮助。
Gerrit 有 2 个权限,Forge Author and Forge Committer。当您推送提交以供审核时,Gerrit 会验证作者电子邮件和提交者电子邮件是否与您在 Gerrit 用户名中注册的电子邮件地址相匹配。如果它们不匹配,则拒绝推送。您使用了 git merge
来应用提交。作者和提交者身份行未更改,并且与您的不匹配。所以推送失败。
这里有2个解决方案。一种是让Gerrit管理员给你2个权限,这样你就可以push别人的commit了。另一种是在不保留作者和提交者身份的情况下应用补丁,通过 git merge --squash
或 git cherry-pick -n
或 git apply
或手动修改文件。