当前位置: 代码迷 >> 综合 >> Gerrit - 本地仓库关联远程分支
  详细解决方案

Gerrit - 本地仓库关联远程分支

热度:19   发布时间:2023-12-29 09:47:39.0

        事情是这样的,前阵子根据领导要求写了个APP,感觉大部分功能都实现了,于是打算上传至服务器,突然想到貌似这个还没建库。心里突然就忐忑起来了,因为之前合并过一次远程分支的结果是提交记录没了。那是一次设备的适配,代码改的可能不算多,但涉及到的功能及需求的修改非常多。好在本次经过尝试,成功提交代码。因此,简单记录下过程。

                                                

第一步肯定要关联远程分支的

$ git remote add origin ssh://192.168.1.1:2948/app/family

添加完成,然后要 pull 一下,果然出现了问题

$ git pull origin master
From ssh://192.168.1.1:2948/app/family
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

译文:拒绝合并不相关的历史

那这意思也就是说本地分支和远程分支还是没在一块儿呗,我就随便试了试,结果出现以下情况

$ git pull origin master --
Display all 44 possibilities? (y or n)
--all                         --ff-only                     --progress                    --signoff
--allow-unrelated-histories   --force                       --prune                       --squash
--append                      --gpg-sign                    --quiet                       --stat
--autostash                   --ipv4                        --rebase                      --strategy=
--cleanup=                    --ipv6                        --recurse-submodules          --strategy-option=
--commit                      --jobs                        --refmap=                     --tags
--deepen=                     --keep                        --server-option=              --unshallow
--depth=                      --log                         --set-upstream                --update-shallow
--dry-run                     --negotiation-tip=            --shallow-exclude=            --upload-pack=
--edit                        --no-...                      --shallow-since=              --verbose
--ff                          --no-verbose                  --show-forced-updates         --verify-signatures

 突然发现后面可以带 --rebase 参数,我们知道

git --rebase会将两个分支融合成一个线性的提交,不会形成新的节点。

 于是大胆尝试,反正我有备份~

然后提示本地有未提交的内容,于是提交一下,在 stash 一下(如果不打算提交可以使用,结束后可以通过 git stash pop 恢复)

结果居然显示成功了

$ git pull origin master --rebase
From ssh://192.168.1.1:2948/app/family
 * branch            master     -> FETCH_HEAD
Successfully rebased and updated refs/heads/master.

看起来已经好起来了啊兄弟们,那就提交一下试一试

$ git push origin master:refs/for/master
Enumerating objects: 414, done.
Counting objects: 100% (414/414), done.
Delta compression using up to 4 threads
Compressing objects: 100% (355/355), done.
Writing objects: 100% (413/413), 191.67 KiB | 2.28 MiB/s, done.
Total 413 (delta 159), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (159/159)
remote: Processing changes: refs: 1, done
remote: ERROR: commit bd1bd7d: missing Change-Id in message footer
remote:
remote: Hint: to automatically insert a Change-Id, install the hook:
remote:   gitdir=$(git rev-parse --git-dir); scp -p -P 2418 lichang@192.168.1.1:hooks/commit-msg ${gitdir}/hooks/
remote: and then amend the commit:
remote:   git commit --amend --no-edit
remote: Finally, push your changes again
remote:
Tossh://192.168.1.1:2948/app/family
 ! [remote rejected] master -> refs/for/master (commit bd1bd7d: missing Change-Id in message footer)
error: failed to push some refs to 'ssh://192.168.1.1:2918/app/family'

 果然还是不行,不过这已经好多了。问了度娘,告诉我说这是因为没有 change-id ,我寻思着我这也是正常的本地提交啊,咋还缺东西了呢。于是又去问了度娘,告诉我 git 本身是不带的,gerrit 特有的。而解决方法也很多,一个是手动解决,还有就是利用 commit-msg hook 自动生成 change-id 。第二方法看起来就很复杂,于是我就用第一种方法试了一下,发现这只能给最近的一次提交记录加上 change-id,这就有点忧伤了。

于是继续浏览发现还可以通过 rebase

格式:git rebase -i [startpoint] [endpoint]

在此,手动感谢

git rebase -i合并多次提交_Hello World ^—^-CSDN博客_git rebase合并多次提交

也就是输入

$ git rebase -i ***

*** 就是远程分支的那次提交 commit id。

然后把 pick 修改为 reword ,然后一路保存 :wq

最后提交代码成功。