2013-08-06 30 views
6

我正在分支A并且未完成功能/任务。然后我需要切换到另一个分支B以便快速修复。当我尝试切换另一个分支时,Git迫使我保存本地更改,否则我将失去所有本地更改。在本地分支上,不想提交更改,但需要切换到另一个分支

我需要提交我的不完整代码。有没有什么办法可以在多个分支之间切换而不需要提交和丢失任何代码?还是有更好的方法来处理这种情况?

+0

可能重复(http://stackoverflow.com/questions/6800778/saving-git-changes-temporarily) – 2013-08-06 07:04:09

回答

9

一个选项,如mipadi demonstrates,只是简单地使用git stash

另一种选择是简单地只是提交您目前的工作正在进行中,转换分支,然后当你准备切换回来,做一个混合重置回以前的承诺:

# While working on "feature" branch, 
# you suddenly need to go work on a hotfix: 
$ git commit --all --message "Backup my feature work" 
$ git checkout -b hotfix master 

# You did your hotfix, and are ready to go back to feature 
$ git checkout feature 
$ git reset head^ 

git reset head^会在执行备份提交之前将混合重置回到提交,并且在备份提交中所做的所有更改都将恢复到您的工作副本。从official Linux Kernel documentation for git reset(重点煤矿):

重置索引而不是工作树(即更改的文件将被保留,但不标记为提交),并报告一直没有什么更新。这是默认操作。

的[保存的Git临时更改]
+0

+1我也推荐这个,因为'git stash'与任何分支无关。做'git commit -a -m''藏匿'保持你的工作环境。这应该是被接受的答案。 – eckes

+0

存储可能与分支无关,但是_is_基于当前的HEAD提交。 'git show -s stash'显示隐藏提交作为两个父提交的合并,其中第一个是隐藏的基础。'git stash [save]'没有给定的消息默认记录分支的名字。 – musiphil

+0

我更喜欢临时存储任何东西,因为只有一个'git stash'命令可以存储索引和工作树的状态。提交不会捕获未分级到索引的工作树中的更改。 – musiphil

8

您可以使用git stash,它将保存您的更改而不创建提交。

首先,藏匿更改:

$ git stash 

然后切换到其他分支:

$ git checkout branch-B 

当你读书,再回到原来的部门和unstash更改:

$ git checkout branch-A 
$ git stash pop 

查看文档链接以上是关于其他用例的更多细节和细节。


技术上讲,它确实建立了承诺,但git stash使用一些魔法,所以你实际上并不看到提交,和Git的工具,知道如何与这些伪提交妥善处理。

+0

那好吧,如果我做了分支-B的一些变化并致力于他们,不会犯我们的分支 - 一个变化? – Suleman

相关问题