git从当前签出的master创建分支?


78

服务器上有一个由git控制的文件夹,在其中检出了主分支,并且一堆文件已被修改但尚未提交。有没有办法将更改提交到单独的分支,以便可以返回到干净版本?

即,我想有效地撤消所有这些人员更改,但将它们存储在另一个机会中,因此,如果该人员想要他们的更改,则可以切换到该分支。

(是的,我知道这不是git的工作方式,但这是我的情况!)任何想法都非常感谢。


1
类似于< stackoverflow.com/questions/1394797/… >。嘿,git在您的情况下效果很好,我不会说它不是为这样的工作流程设计的。它是!
knittl

为了澄清起见,我希望这些更改将永远不会使用,但是我确实需要一个永久记录,以防万一。
corydoras

Answers:


136

首先,按照以下步骤移动到基于当前HEAD的另一个分支:

git checkout -b newbranch

提交所有更改(假设没有新添加的文件,否则为新文件git add):

git commit -a

返回到master分支:

git checkout master

先前未提交的更改将全部位于newbranch分支上,而master仍将处于没有这些更改的状态。


5
说明:工作库的内容和暂存的更改不属于任何分支。简单地在HEAD(最新版本)上创建新分支就足以使新提交继续在刚创建的branch上进行<newbranch>
JakubNarębski09年

谢谢大家,我认为切换到新分支可能会消除所做的更改。来自SVN背景,我认为不可能进行这种切换。现在进行测试。
corydoras

14

此方法很有用:

git checkout -B <new_branch> <start point>

哪里:

  • <new_branch>是您的新分支(例如my_branch
  • <start point>是您的起始分支(master根据您的情况)
  • -B从创建一个新分支<start point>(如果已经存在),然后将其重置为(-b分支已经存在就不会失败)
  • 有时-m在指定切换分支时可能很有用,这将在当前分支,您的工作树内容(用于脚本编制)之间执行三路合并。

请参阅:man git-checkout有关更多详细信息。


13

您可以随时存储更改。

git stash
git checkout -b bravenewmaster
git stash apply

还请记住,如果您提交到“错误的”分支,则始终可以将该分支移回,因为分支只是指向提交的指针。


3
如果您要立即重新应用相同的更改,为什么还要麻烦藏起来?您也可以这样做git checkout -b bravenewmaster。打字少,不会不必要地触摸所有更改的文件。
CB Bailey

1
好吧,我还没有尝试过,但是我认为git无论出于什么原因,git checkout -b当发生变化时都不会让步。否则,为什么要提问?;-)
Michael Krelin-黑客

实际上,就我所说的“我想有效地撤消所有这些人的更改,但将它们存储在另一个机会中,以便该人想要他们的更改,他们可以切换到该分支”,我的话可以说:仅存储就足够了,无需分支和应用。
Michael Krelin-黑客

1
如果他存储更改(而不是临时“存储”),那么在命名分支上进行提交(带有消息)可能比不意外删除的存储更合适。两者都可以,但是。
CB Bailey

1
当然,我不能完全理解别人的意图,但是有一种感觉,“我想在这个实例上工作,但是您修改了它的地狱,请您回避,以后再自己处理” ;-)
Michael Krelin-黑客
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.