在git中切换分支名称


103

提出这个问题的方法可能不只一种,所以这里是对问题的描述。我当时正在研究母版,并做了一些工作,然后决定要暂停该工作。我备份了一些提交,然后从开始垃圾工作之前分支。实际上这很好,我现在有一个不同的分支作为我的主要开发分支。我想知道如何改变周围的环境,以便我再次从事master的工作,但是没有我的垃圾工作,他说工作在另一个分支上。

可以通过一些方法来解决:如何将我的master分支重命名为其他名称,然后再将其他名称重命名为master?如何备份master,然后使过去备份的所有提交都位于不同的分支上?

感谢所有(快速)答案!他们都很好。

Answers:


144

除了其他注释之外,您可能会发现-m(move)开关对git-branch很有帮助。您可以将旧的master重命名为其他名称,然后将新分支重命名为master:

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

根据您的工作流程,您可能还想更改.git / config中的任何分支引用。我改为[branch "crap_work"]阅读,[branch "master"]以便母版仍与同步origin/master。当然,两个存储库的状态是如此,这仍然很有意义。
同义的2012年

3
这不会重命名远程存储库上的分支,而仅重命名本地存储库。
smohadjer 2014年

1
@smohadjer要重命名遥控器,请执行git push -uf origin mastergit push -u origin crap_work
zyy

31

我认为您应该考虑采用其他开发策略来防止此类问题。最适合我的一种方法是永远不要直接在主分支上进行开发。无论我进行什么更改,我总是为新代码创建一个新分支:

git checkout -b topic / topic_name主

从那里,我可以将更改发布到公共存储库:

git push pu topic / topic_name

或最终将其合并回我的master分支中:

git checkout master && git合并topic / topic_name

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

 git branch -m主垃圾
 git co -b主old_sha1_value

那是个好政策。想到这一点,我已经在其他地方看到了这种做法。谢谢。
Rimian

14

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

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

1
我认为这没有理由被否决。在了解分支-m之前,我做了几次自己的工作,并意识到master并非作为分支的永久名称而被固定地绑着。
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创建一个分支并将其激活。
化身为2010年

0

这将使您的主人一步一步设置:

git checkout -B master new_point
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.