【问题标题】:using git stash to move the changes to a different branch使用 git stash 将更改移动到不同的分支
【发布时间】:2016-06-08 07:34:12
【问题描述】:
在 git 中,如果我们不小心在不同的分支上工作,并且我们不希望提交未经测试的代码,我看到有人使用 stash 来保存未提交的更改,切换到正确的分支,然后应用 stash。
据我了解,如果我们做了一些未提交的更改,我们可以简单地移动到正确的分支并提交代码。为什么我们甚至需要隐藏它,因为未提交的更改将在所有分支中可见。
我记得在一些文档中看到,如果您有任何未提交的更改,git 将不允许您在分支之间切换。有什么我遗漏的吗?
【问题讨论】:
标签:
git
git-branch
git-commit
git-stash
【解决方案1】:
是的;您正在处理的分支上可能还有其他发展。假设:
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 不在同一个提交上,你不能只是切换分支。再假设你在 bad-branch 上做了开发,但是你还没有提交,那么有几种方法可以继续:
- 使用
git stash 将您的工作放在一边,切换分支并重新应用它们
- 在 bad-branch 上提交您的更改并使用
git cherry-pick 在 good-branch 上重新应用它们(稍后从 bad-branch 中删除该提交
- 涉及创建临时分支的更多可能性,
git rebase -i,...
【解决方案2】:
您没有有在切换分支之前将未提交的更改存储到跟踪文件中。如果您要切换到的分支已经以与您未提交的更改相同的名称提交了文件,则这不是一种安全措施。如果您不存储更改,git checkout 将拒绝在这种情况下切换分支,除非您指定 -f。如果您存储并弹出您的更改,您就有机会将未提交的更改与已提交的更改合并。因此,它归结为您首选的工作流程以及您对另一个分支中已经提交的内容的确定程度。