Git - 重命名本地分支,其中有 2 个提交被推送到远程
Git - Rename a local branch which has 2 commits pushed to remote
我有一个跟踪远程分支的分支,我已经提交了 2 个已推送到远程分支的提交,但尚未 PR 并合并到主分支中。
我现在需要重命名我的本地分支,将其推送到远程,然后 PR 并将该分支合并到 master。
这个工作流程是否正确?提前致谢...我对 Git 的大部分内容仍然相对陌生,因此非常感谢任何意见。
- 在本地分支上取消设置上游分支
- 重命名本地分支
- 将本地分支推送到远程
- 创建 PR 将新分支合并到 master
嗨伙计,我希望你理解我的工作流程。
首先,我们必须重置主人。只是让你的没有其他人合并一些东西,这会让你更难。
- checkout master拉电流"state"
$ git checkout master
$ git pull
$ git log
- 在 2 次合并提交后复制提交 ID
- 重置主机(确定你做了什么!)
$ git reset --hard <commit-id-that-you-copied>
- 查看本地master日志
git log
- 删除您的远程分支(已合并)并重命名您的本地分支,然后再次推送它
$ git push <remote_name> :<branch_name>
(e.x. git push origin:your_local_branch
- 重命名本地分支
$ git branch -m <your_new_name>
- 向上游推送新分支并创建 PR
git branch --set-upstream-to=origin/your_new_name
这是最简单的方法,但请确定您在做什么。
(一般来说,分支的名字不用太在意)
您可以只创建一个新分支并删除旧分支。
git checkout this_name_was_right_and_the_time
git checkout -b feature/this_name_is_definitely right
git push
- 从新分支创建 PR
- 删除旧分支
我发现这里的答案有点偏离目标,或者有些稀疏,所以我想我会跟踪一个分支重命名并提供一个完整的答案。本方案完全在本地命令行进行。
因此,根据OP,如果本地分支被推送到源,但尚未合并,它仍然可以重命名,远程分支被删除,因此可以推送本地分支以替换它新名称。
假设要重命名的分支是 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
因此,为了实现这一切,将本地分支推送到 origin,并使用其新名称:
$ 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
有时是这样)您总是可以先压缩您的本地存储库,并将其放在某处,这样您至少可以在本地恢复,甚至如有必要,将旧文件复制到存储库中;-)
我有一个跟踪远程分支的分支,我已经提交了 2 个已推送到远程分支的提交,但尚未 PR 并合并到主分支中。
我现在需要重命名我的本地分支,将其推送到远程,然后 PR 并将该分支合并到 master。
这个工作流程是否正确?提前致谢...我对 Git 的大部分内容仍然相对陌生,因此非常感谢任何意见。
- 在本地分支上取消设置上游分支
- 重命名本地分支
- 将本地分支推送到远程
- 创建 PR 将新分支合并到 master
嗨伙计,我希望你理解我的工作流程。 首先,我们必须重置主人。只是让你的没有其他人合并一些东西,这会让你更难。
- checkout master拉电流"state"
$ git checkout master
$ git pull
$ git log
- 在 2 次合并提交后复制提交 ID
- 重置主机(确定你做了什么!)
$ git reset --hard <commit-id-that-you-copied>
- 查看本地master日志
git log
- 删除您的远程分支(已合并)并重命名您的本地分支,然后再次推送它
$ git push <remote_name> :<branch_name>
(e.x. git push origin:your_local_branch
- 重命名本地分支
$ git branch -m <your_new_name>
- 向上游推送新分支并创建 PR
git branch --set-upstream-to=origin/your_new_name
这是最简单的方法,但请确定您在做什么。
(一般来说,分支的名字不用太在意)
您可以只创建一个新分支并删除旧分支。
git checkout this_name_was_right_and_the_time
git checkout -b feature/this_name_is_definitely right
git push
- 从新分支创建 PR
- 删除旧分支
我发现这里的答案有点偏离目标,或者有些稀疏,所以我想我会跟踪一个分支重命名并提供一个完整的答案。本方案完全在本地命令行进行。
因此,根据OP,如果本地分支被推送到源,但尚未合并,它仍然可以重命名,远程分支被删除,因此可以推送本地分支以替换它新名称。
假设要重命名的分支是 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
因此,为了实现这一切,将本地分支推送到 origin,并使用其新名称:
$ 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
有时是这样)您总是可以先压缩您的本地存储库,并将其放在某处,这样您至少可以在本地恢复,甚至如有必要,将旧文件复制到存储库中;-)