remote rejected] HEAD -> refs/for/v2.5 (change 256860 closed) gerrit报错原因

_gen_ChangeIdInput() {
    echo "tree `git write-tree`"
    if parent=`git rev-parse "HEAD^0" 2>/dev/null`
    then
        echo "parent $parent"
    fi
    echo "author `git var GIT_AUTHOR_IDENT`"
    echo "committer `git var GIT_COMMITTER_IDENT`"
    echo
    printf '%s' "$clean_message"
} 
_gen_ChangeId() {
    _gen_ChangeIdInput |
    git hash-object -t commit --stdin
} 

_gen_ChangeIdInput 函数输出的信息包括:tree parent author committer 以及 log信息原文。把这些输出到命令git hash-object -t commit --stdin 生成一个40位的哈希值,然后这个哈希值,经过awk这一串处理后,前面加上了 Change-ID: 最后就形成了 Change-Id: I7242a41d8c77df44d48aa97c9f1c9c502270bbd8 这样子的change-id内容。

 

出现如题所示的报错是因为历史记录里出现了两个相同的Change-ID。

回想操作过程,之前提交的时候因为有merge,所以在gerrit服务器上审核的时候,我给abandoned了,因此从新处理提交的时候就出现了相同的tree, parent, author, committer以及log原文,这也就不难怪change-id也相同了。

 

添加一次可能导致Change-ID相同的情况,新的分支的提交是从另外的分支上cherry-pick过来的,所以当abandoned一次之后,再次cherry-pick时,Change-ID作为提交记录一并cherry-pick过来了,所以会重复。方法是删除Change-ID,然后重新git commit --amend重新生成新的Change-ID

posted on 2016-03-24 14:37  Matrixin  阅读(5538)  评论(0编辑  收藏  举报

导航