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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM