我发现这里的答案有点偏离目标,或者有些稀疏,所以我想我会跟踪一个分支重命名并提供一个完整的答案。该解决方案完全在本地命令行上执行。
所以,根据OP,如果本地分支被推送到origin,但尚未合并,仍然可以重命名,并且远程分支被删除,因此可以将本地分支推送到新分支下替换它名字。
假设要重命名的分支是feature/old_name,新名称是feature/new_name。
首先检查你在哪里。有时我认为我仍然在某个特定的分支上,但实际上我不在,或者我忘记了我应该在一个特定的分支上进行操作,所以最好只检查你在哪里:
$ git status
# On branch feature/old_name
nothing to commit, working directory clean
列出所有可用的分支,只是为了定位:
$ git branch
feature/some_name
* feature/old_name
master
如果您不在要重命名的分支上,请确保您是:
$ git checkout feature/old_name
Already on 'feature/old_name'
然后只需使用 -m 选项重命名本地分支。对于本地分支,就这么简单:
$ git branch -m feature/new_name
现在要检查远程跟踪,发出一个“非常详细”的分支请求,然后观察刚刚重命名的分支仍在使用它的旧名称在远程跟踪:
$ git branch -vv
feature/some_name fc0ec55 [origin/feature/some_name] Some commit message
* feature/new_name a64af75 [origin/feature/old_name] Previous commit message
master 3a0c732 [origin/master] Another commit message
所以现在有必要完全删除旧名称的远程跟踪分支。新名称的分支仍然签出:
$ git status
# On branch feature/new_name
nothing to commit, working directory clean
$ git push origin --delete feature/old_name
- [deleted] feature/old_name
如果您检查您的在线 Web GUI(GitLab、GitHub、BitBucket...),您应该会发现 old_name 远程分支,并且它的提交已经消失。
但是现在看本地,本地跟踪实际上并不知道远程分支已经走了:
$ git branch -vv
feature/some_name fc0ec55 [origin/feature/some_name] Some commit message
* feature/new_name a64af75 [origin/feature/old_name] Previous commit message
master 3a0c732 [origin/master] Another commit message
因此,为了实现这一切,请将本地分支推送到原点,并使用其新名称:
$ git push -u origin feature/new_name
Counting objects: 21, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (14/14), 2.46 KiB | 0 bytes/s, done.
Total 14 (delta 11), reused 0 (delta 0)
remote: Create pull request for feature/new_name:
* [new branch] feature/new_name -> feature/new_name
Branch feature/new_name set up to track remote branch feature/new_name from origin.
并确认:
$ git status
# On branch feature/new_name
nothing to commit, working directory clean
$ git branch -vv
feature/some_name fc0ec55 [origin/feature/some_name] Some commit message
* feature/new_name a64af75 [origin/feature/new_name] Previous commit message
master 3a0c732 [origin/master] Another commit message
该分支现在应该可以在您的遥控器上以新名称使用。
我还没有测试过其他人也将提交推送到远程分支的场景,但只要您在执行此序列之前pull 分支,我相信这也应该有效。
如果您有疑问(git 有时就是这样),您始终可以先压缩您的本地存储库,并将其放在某个地方,这样您至少可以在本地恢复,即使通过复制如有必要,将旧文件保存到 repo ;-)