使用git stash将更改移动到其他分支

时间:2016-02-25 13:34:15

标签: git git-branch git-commit git-stash

在git中如果我们意外地在不同的分支上工作并且我们不希望提交未经测试的代码,我看到人们使用stash来保存未提交的更改,切换到正确的分支然后应用存储。

据我了解,如果我们做了一些未提交的更改,我们可以简单地移动到正确的分支并提交代码。为什么我们甚至需要存储它,因为在所有分支中都可以看到未提交的更改。

我记得在某些文档中看到,如果您有任何未提交的更改,git将不允许您在分支之间切换。有什么我想念的吗?

2 个答案:

答案 0 :(得分:2)

是;你正在研究的分支机构可能还有其他的发展。假设:

sha2 <good-branch><bad-branch>
sha1 <master>

并且您已经在 bad-branch 上进行了开发,但是您还没有提交它们,那么您可以简单地执行git checkout good-branch并提交,而无需隐藏。但是,如果您处于此(或类似)场景中:

sha3 <bad-branch>
sha2 <good-branch>
sha1 <master>

然后* good-branch和 bad-branch 不在同一个提交中,你不能只是切换分支。假设您已经在坏分支上进行了开发,但是您还没有提交它们,那么有几种方法可以继续:

  • 使用git stash将您的工作放在一边,切换分支并重新应用
  • 坏分支上提交您的更改,并使用git cherry-pick好分支上重新应用它们(并在以后从中删除该提交)分枝
  • 涉及创建临时分支的更多可能性,git rebase -i,...

答案 1 :(得分:1)

在切换分支之前,您没有 将未经提交的更改存储到跟踪的文件中。如果您切换到的分支已经在与未提交的更改相同的名称下提交了文件,那么这不是一个安全措施。如果您不保留更改,git checkout将拒绝在这种情况下切换分支,除非您指定-f。如果您隐藏并弹出更改,您将有机会将未提交的更改与已提交的更改合并。因此,它归结为您首选的工作流程以及您对另一个分支中已经提交的内容的确定性。