在Git中切换分支名称

108

可能有多种方式来提出这个问题,所以这里是问题的描述。我正在主分支上工作,提交了一些东西,然后决定把那个工作搁置一下。我备份了几个提交,然后从我开始瞎搞之前的分支分支。实际上这很好用,我现在只是有一个不同的分支作为我的主要开发分支。我想知道如何改变情况,使我再次在主分支上工作,但它没有我的垃圾工作,而该工作在另一个分支上。

一些解决方案: 1. 如何将我的主分支重命名为其他名称,然后将其他名称重命名为主分支? 2. 如何备份主分支,然后导致我备份过去的所有提交都在另一个分支上?

感谢所有(快速)回答! 它们都很好。

5个回答

148

除了其他评论之外,你可能会发现git-branch的-m(移动)开关很有帮助。你可以将旧的主分支重命名为其他名称,然后将新的分支重命名为master:

git branch -m master crap_work
git branch -m previous_master master

根据您的工作流程,您可能还想更改.git/config中的任何分支引用。我将[branch "crap_work"]更改为[branch "master"],以便主分支仍然与origin/master同步。当然,两个存储库的状态仍然是有意义的。 - Eponymous
3
这不会重命名远程仓库上的分支,只会在本地仓库中进行重命名。 - smohadjer
2
要重命名远程仓库,您需要执行 git push -uf origin mastergit push -u origin crap_work - zyy

31

我认为您应该考虑一种不同的开发策略,以防止出现像这样的问题。对我来说,最好的方法是永远不要在主分支上直接进行开发。无论我做出了哪些更改,我总是为新代码创建一个新的分支:

git checkout -b 主题/主题名称 主分支

从那里,我可以将更改推送到公共存储库中:

git push 存储库 主题/主题名称

或者最终只需将其合并回我的主分支:

git checkout 主分支 && git merge 主题/主题名称

如果您真的需要返回到旧时间点并将其设置为主分支,则可以将当前分支重命名为其他名称,然后检出较旧版本作为您的主分支:

 git branch -m 主分支 旧分支名称
 git co -b 主分支 旧SHA1值

这是一个很好的政策。想一想,我在其他地方也看到过这种做法。谢谢。 - Rimian

14

master 分支开始,创建一个名为 in-progress 的分支,然后将 master 重置为早期的提交。

$ git branch in-progress
$ git reset --hard HEAD^

1
我看不出这个被投票否决的理由。在了解到分支-m并意识到主分支不是一个永久的分支名称之前,我自己也做过几次。 - skiphoppy

7
这相对比较简单:
git checkout -b fake_master master # fake_master now points to the same commit as master
git branch -D master               # get rid of incorrect master
git checkout -b master real_master # master now points to your actual master
git checkout master                # optional -- switch on to your master branch

1
是的,最后一个参数完全是可选项 -- git checkout -b 命令既创建了分支,也将其设为活动分支。 - BorisOkunskiy

-1

这将在一步中将您的主分支设置为任何点:

git checkout -B master new_point

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接