在完成一次实验时,由于我的分支命名错误,导致老师无法读取到我的内容。因此我需要修改远程仓库的分支名。Github无法实现远程仓库的重命名,所以改名字比较麻烦。

我的想法是,我创建一个命名正确的新分支,把旧分支里的内容放进去,然后再把原来的旧分支删除即可。

首先,我将远程仓库复制一份到本地

git仓库IP更换解决 git修改仓库名_git仓库IP更换解决


打开这个仓库,新建一个命名正确的分支,假设我们需要的名字为“新分支”

git仓库IP更换解决 git修改仓库名_git仓库IP更换解决_02


然后,把旧分支的内容复制过来,旧分支名为“3.14change”

git仓库IP更换解决 git修改仓库名_远程仓库_03


此处git提示自动merge失败,有一部分内容需要手动commit,否则无法push

可以看到分支名称旁边有MERGING提示

commit之后提示就没了,此时可以进行push

git仓库IP更换解决 git修改仓库名_git_04


再然后,进入github把之前命名错误的分支删除即可

git仓库IP更换解决 git修改仓库名_远程仓库_05


git仓库IP更换解决 git修改仓库名_github_06

以上方式可以做到我们所需求的更改分支名的目标

然而有一点点小问题,中间由于merge失败,我们进行了一次commit,那么仓库里就会显示额外多出来了一个版本,并且会刷新你仓库的最后提交时间。我想尽可能避免这种情况的发生。

由于在复制远程仓库的过程中,工作台会默认将master分支中的内容复制下来。使用"git checkout -b 新分支"切换一个新分支时,实际上工作台的内容并没有清空,所以将旧分支pull下来的过程中不可避免会出现merge操作,如果运气不好自动merge失败就会出现需要手动commit的情况。

为了避免这种情况,我首先想到的是,在新建了分支之后手动把工作台清空,这样肯定不会出现需要merge的内容了。

结果并不是这样。

git仓库IP更换解决 git修改仓库名_git仓库IP更换解决_07


即便工作台清空了,还是有merge操作。而且这次pull反而没有把整个分支拷贝下来,似乎一些内容漏掉了。

在删除完成后通过查询状态可以发现,git显示我删除了内容。

git仓库IP更换解决 git修改仓库名_github_08


根据我的理解,“git checkout -b 新分支”这个指令虽然说是创建新分支并切换到新分支,但是这个新分支的初始内容默认为你之前所在的分支的内容(例如master),而不是想象中的空分支。所以删除之后还是需要commit的,因为内容发生了变化。这条路走不通,于是乎我想,如果我复制仓库时只复制分支内容,这样出现在工作台上的就是分支里的内容,那么我新建分支之后就可以直接push了,不就不会出现变化新增commit了吗?

然而,在远程仓库可以发现,无论我切换到master还是其他分支,克隆所需的url码都是同一个

git仓库IP更换解决 git修改仓库名_github_09


git仓库IP更换解决 git修改仓库名_github_10


(虽然显示不完整,但复制下来后可发现两个url地址相同)

这个url地址就是整个仓库的地址。
后来经过了解,实际上无论你在远程仓库正在查看哪个分支,复制下来的url都是整个仓库的url,并且,使用这个url进行复制之后得到的都是整个仓库,实际上包含了所有的分支内容。只不过默认显示的是master当中的内容而已。

实际上,通过"git checkout 分支名"就可以将工作台的内容切换为分支上的内容

git仓库IP更换解决 git修改仓库名_远程仓库_11


git仓库IP更换解决 git修改仓库名_远程仓库_12


git仓库IP更换解决 git修改仓库名_远程仓库_13


可以看到,切换分支之后工作台的内容也发生了改变,当前工作台的内容就是切换到的分支的内容。

此时进行改名只需要两条指令:

git checkout -b 新分支
git push --set-upstream origin 新分支

便可在远程仓库生成一个名字正确的分支,内容与旧分支的内容一致,且没有进行新的commit,不会让你错过ddl。

之后再删除命名错误的旧分支即可。