在git中安全地切换分支

时间:2011-05-24 21:36:58

标签: git

我在主分支上,想要处理新功能,所以我这样做:

git checkout -b new_feature

现在我正在编码,执行git状态会显示已修改的文件。

如果我尝试移动到主分支,它说我不能更新已更新的文件。

好的,我会添加它们:

git add -A

现在如果我尝试跳转到主分支,似乎想要合并???

git checkout master

我想知道怎么做:

  1. 在另一个分支中,我想停止我正在做的事情并转移到主分支,而不是合并任何东西,我只是想停止在新的功能分支上工作并重新掌握。

4 个答案:

答案 0 :(得分:8)

你有两个选择(至少)。 “正在进行中的工作”提交或存储。

“正在进行的工作”提交就是:它是代表未完成工作的分支中的提交:

$ git commit -am'WIP (description here)'
$ git checkout master

稍后,当您回到分支机构时,您可以继续工作并提交:

$ git checkout mybranch
# do work
$ git commit -am'Finish WIP (description here)'

完成后,如果需要,您可以将“WIP”提交合并到一致的提交中,而没有证据表明您已完成部分工作:

$ git rebase -i HEAD~2    # See instructions for rebase -i elsewhere

或者,您可以使用藏匿处:

$ git add .
$ git stash save 'WIP (descriptino here)'
$ git checkout master

稍后,当你回到你的分行时:

$ git checkout my_branch
$ git stash pop

你会离开你离开的地方。

答案 1 :(得分:2)

git stash可能就是您要找的。

答案 2 :(得分:2)

您似乎忘了commitadd进行索引的更改。

git add <something>
git commit
git checkout master

答案 3 :(得分:0)

通过执行git add -A,您只需将更改添加到索引中 - 也就是说,您告诉git这些更改是您在执行git commit后将提交的更改。你实际上没有提交任何东西,所以当你试图检查其他东西git警告你,因为你会失去你的索引。 git commit -m“你的提交消息”会将索引的更改添加到new_feature之上的树中,并从索引中删除它们,这样你就可以在之后立即切换分支。

Git stash是另一种选择,但是根据你对new_features的更改产生冲突的可能性,你可能更喜欢进行提交(然后你可以重置 - 混合HEAD~1以便在没有提交的情况下提交改变你的工作副本。)