Answers:
有多种方法,具体取决于您走多远以及您希望它们在哪个分支上。
让我们来看一个经典的错误:
$ git checkout master
... pause for coffee, etc ...
... return, edit a bunch of stuff, then: oops, wanted to be on develop
因此,现在您希望尚未更改的这些更改master
继续进行develop
。
如果你没有一个develop
呢,方法很简单:
$ git checkout -b develop
develop
无论您现在在哪里,这都会创建一个新分支。现在您可以提交了,新的东西就全部启用了develop
。
你确实有一个develop
。看看Git是否会让您不做任何事情切换:
$ git checkout develop
这要么成功,要么抱怨。如果成功,那就太好了!刚犯下。如果不是(error: Your local changes to the following files would be overwritten ...
),您仍然有很多选择。
最简单的可能是git stash
(就像其他击败我的其他回答者post所说)。运行git stash save
或git stash push
,1或只是简单的git stash
,它是save
/的缩写push
:
$ git stash
这使用怪异的non-branch-y方法提交了您的代码(是的,确实确实进行了一些提交)。它所做的提交不在任何分支上,而是现在安全地存储在存储库中,因此您现在可以切换分支,然后“应用”存储:
$ git checkout develop
Switched to branch 'develop'
$ git stash apply
如果一切顺利,并且您喜欢结果,那么应该git stash drop
隐藏。这将删除对奇怪的非分支提交的引用。(它们仍然在存储库中,有时可以在紧急情况下进行检索,但是对于大多数目的,您应该考虑到它们已经消失了。)
该apply
步骤使用Git强大的底层合并机制合并隐藏的更改,与分支合并时使用的东西相同。这意味着如果您错误地处理的分支与您要处理的分支有足够的区别,则可能会出现“合并冲突”。因此,最好是在假定存储没有问题的情况下仔细检查结果,即使Git本身未检测到任何合并冲突也是如此。
很多人使用git stash pop
,这是简写git stash apply && git stash drop
。就目前而言,这很好,但这意味着,如果应用程序导致混乱,而您决定不想沿着这条路走下去,就无法轻易地收回藏匿处。这就是为什么我建议单独apply
/检查结果(drop
仅在满足时)。(当然,这确实引入了另一个观点,您可以再休息一下,而忘记自己在做什么,回来做错事情,因此这不是完美的解决方法。)
1将save
在git stash save
是老动词用于创建新的存储。Git版本2.13引入了新的动词,以使事物更一致,pop
并为创建命令添加更多选项。Git版本2.16正式弃用了旧的动词(尽管它仍然可以在Git 2.23中使用,Git 2.23是我编辑此版本时的最新版本)。
git stash
那样进行提交,以使这些提交(对于git stash
,您每个存储项获得两次提交,这是一种不寻常的安排)不在任何分支上。但是,除了非常短期的特殊情况外,我通常更喜欢进行常规提交。你可以git reset --soft
或git reset --mixed
更高版本,或使用git commit --amend
来推它放在一边,当你回到该分支上工作。(在现代Git中,您也可以使用git worktree add
,这可能是更好的解决方案。)
git stash
git-scm.com/book/en/Git-Tools-Stashing