赞
踩
在完成一次实验时,由于我的分支命名错误,导致老师无法读取到我的内容。因此我需要修改远程仓库的分支名。Github无法实现远程仓库的重命名,所以改名字比较麻烦。
我的想法是,我创建一个命名正确的新分支,把旧分支里的内容放进去,然后再把原来的旧分支删除即可。
首先,我将远程仓库复制一份到本地
打开这个仓库,新建一个命名正确的分支,假设我们需要的名字为“新分支”
然后,把旧分支的内容复制过来,旧分支名为“3.14change”
此处git提示自动merge失败,有一部分内容需要手动commit,否则无法push
可以看到分支名称旁边有MERGING提示
commit之后提示就没了,此时可以进行push
再然后,进入github把之前命名错误的分支删除即可
以上方式可以做到我们所需求的更改分支名的目标
然而有一点点小问题,中间由于merge失败,我们进行了一次commit,那么仓库里就会显示额外多出来了一个版本,并且会刷新你仓库的最后提交时间。我想尽可能避免这种情况的发生。
由于在复制远程仓库的过程中,工作台会默认将master分支中的内容复制下来。使用"git checkout -b 新分支"切换一个新分支时,实际上工作台的内容并没有清空,所以将旧分支pull下来的过程中不可避免会出现merge操作,如果运气不好自动merge失败就会出现需要手动commit的情况。
为了避免这种情况,我首先想到的是,在新建了分支之后手动把工作台清空,这样肯定不会出现需要merge的内容了。
结果并不是这样。
即便工作台清空了,还是有merge操作。而且这次pull反而没有把整个分支拷贝下来,似乎一些内容漏掉了。
在删除完成后通过查询状态可以发现,git显示我删除了内容。
根据我的理解,“git checkout -b 新分支”这个指令虽然说是创建新分支并切换到新分支,但是这个新分支的初始内容默认为你之前所在的分支的内容(例如master),而不是想象中的空分支。所以删除之后还是需要commit的,因为内容发生了变化。
这条路走不通,于是乎我想,如果我复制仓库时只复制分支内容,这样出现在工作台上的就是分支里的内容,那么我新建分支之后就可以直接push了,不就不会出现变化新增commit了吗?
然而,在远程仓库可以发现,无论我切换到master还是其他分支,克隆所需的url码都是同一个
(虽然显示不完整,但复制下来后可发现两个url地址相同)
这个url地址就是整个仓库的地址。
后来经过了解,实际上无论你在远程仓库正在查看哪个分支,复制下来的url都是整个仓库的url,并且,使用这个url进行复制之后得到的都是整个仓库,实际上包含了所有的分支内容。只不过默认显示的是master当中的内容而已。
实际上,通过"git checkout 分支名"就可以将工作台的内容切换为分支上的内容
可以看到,切换分支之后工作台的内容也发生了改变,当前工作台的内容就是切换到的分支的内容。
此时进行改名只需要两条指令:
git checkout -b 新分支
git push --set-upstream origin 新分支
便可在远程仓库生成一个名字正确的分支,内容与旧分支的内容一致,且没有进行新的commit,不会让你错过ddl。
之后再删除命名错误的旧分支即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。