如何在不获取其他本地分支的未提交更改的情况下创建本地分支?

时间:2012-04-02 20:32:54

标签: git

我目前正在处理多个更改/错误,我希望能够使用各个本地分支机构单独处理这些问题。但是当我正在处理某些事情时,例如branch_a,然后我需要开始研究一个新的热门项目,并创建一个branch_b,我仍然有我做的更改来自branch_a

以下是工作流程:

  1. branch_a分支
  2. 创建并签出本地dev
  3. branch_a进行了本地更改(但没有通过git add暂存或在本地提交)
  4. 需要启动新的热门错误,以便切换到dev分支,并创建并签出branch_b
  5. 执行git status我看到我在branch_a
  6. 所做的更改

    如何创建一个没有我在branch_a上做出的更改的新分支?

    另外,当我结帐另一个分店时,我得到了

    $ git checkout branch_b
    M   app/controllers/stuff.rb
    M   app/views/stuff/index.html.erb
    Switched to branch 'branch_b'
    

    M代表什么?

    由于

4 个答案:

答案 0 :(得分:2)

M表示已修改。首先,您必须将更改提交到当前分支或存储它们。

当你想要藏匿它们时:

git add .
# temporary stash your changes
git stash
# create a new branch
git checkout -b branch_b
# do your changes
git commit -am 'fixed but in branch_b'
# go back to branch a
git checkout branch_a
# get back your stash
git stash pop

当您选择提交更改时:

git add .
git commit -am 'changes in branch_a'
# creating and checkout new branch
git checkout -b branch_b
# fix your bug
git add .
git commit -am 'just fixed a bug'

答案 1 :(得分:1)

M已修改。您已修改该文件,并且它已取消暂存。您可以添加修改,然后在交换到新分支之前将其作为正在进行的工作提交到branch_a,或者在交换之前使用git stash存储更改。

答案 2 :(得分:0)

您需要在某处保存未经注册的更改。也就是说,除非你想摆脱它们,但你可能不想这样做。

这里最好的解决方案几乎肯定是git stash。这使您可以“隐藏”未经修改的更改,以便您可以使用新的工作副本,然后您可以稍后重新应用您的存储。

答案 3 :(得分:0)

M表示文件已修改。为了做你想做的事,我通常使用两种方法。

一种方法是使用存储,在离开当前分支之前调用git stash,并且所有更改都将被放入称为存储的各种“二级索引”中。当您返回原始分支时,只需致电git stash pop即可将更改从存储中撤回。

另一种我经常使用的方法,如果我预计我的新更改将会相当长久,只是做一个“wip”提交,我稍后会回复:

(oldbranch)$ git add -A . && git commit -m"wip"
(oldbranch)$ git checkout master && git checkout -b newbranch
# work on the new branch....
(newbranch)$ git checkout oldbranch
(newbranch)$ git reset HEAD^

git reset HEAD^将您的工作目录恢复到分支当前头部之前的提交,并将属于该“wip”提交的所有更改移回工作目录,有效地将您设置回原处你是。