好吧,假设有一天我们碰巧做了一堆修改,当我们提交它们时,我们注意到我们在错误的分支上工作。
我们如何强迫git切换分支不丢弃局部更改。
在等待回复的过程中,我可能会以一种天真的方式谈论这个问题,但我想知道是否有正确的程序,因为如果我说我以前没有遇到过这种情况,那我就是在撒谎……
git reset --hard
git checkout right-branch
git commit -m "changes"
git stash
git stash list
git stash apply stash@{x}
使用git stash
它将更改推入堆栈。当你想把它们拉回来的时候使用
git stash apply
你甚至可以把单独的项目拉出来。
彻底吹走藏匿物:
git stash clear
你可以:
使用git stash来搁置你的更改,
创建另一个分支并在那里提交更改,然后将该分支合并到工作目录中
有很多不同的方法,这取决于你走了多远,以及你想要它们在哪个分支上。
让我们来看一个典型的错误:
$ git checkout master ... pause for coffee, etc ... ... return, edit a bunch of stuff, then: oops, wanted to be on develop
所以现在你想要这些你还没有提交给master的更改在develop上。
master
develop
如果你没有 a develop,该方法是平凡的:
$ git checkout -b develop
你确实有 a develop。看看Git是否会让你切换 做任何事:< / p >
$ git checkout develop
error: Your local changes to the following files would be overwritten ...
git stash save
git stash push
save
push
$ git stash
这提交你的代码(是的,它确实做了一些提交)使用 一个奇怪的非分支方法。它所做的提交不是“在”任何上 分支,但现在安全地存储在存储库中,所以您现在可以 切换分支,然后“应用”stash:
$ git checkout develop Switched to branch 'develop' $ git stash apply
如果一切顺利,并且你喜欢结果,你应该git stash drop隐藏。这将删除对奇怪的非分支提交的引用。(它们仍然在存储库中,有时可以在紧急情况下检索,但对于大多数目的,您应该认为它们在那时已经消失了。)
git stash drop
apply步骤使用Git强大的底层合并机制对存储的更改进行合并,这与你做分支合并时使用的东西是一样的。这意味着如果您错误地处理的分支与您打算处理的分支有足够大的不同,那么您可能会得到“合并冲突”。因此,在你假设已经干净地应用了即使Git本身没有检测到任何合并冲突。之前,仔细检查结果是一个好主意
apply
许多人使用git stash pop,这是git stash apply && git stash drop的简称。就目前而言,这还不错,但这意味着如果应用程序的结果一团糟,而您决定不继续走这条路,那么您就无法轻松地取回存储。这就是为什么我建议单独的apply,检查结果,drop仅当/当满意时。(当然,这确实引入了另一个点,你可以再喝一杯咖啡休息一下,忘记你在做什么,回来,做错误的的事情,所以这不是一个完美的治疗。)
git stash pop
git stash apply && git stash drop
drop
__abc3 git stash save中的save是创建一个新收藏的旧动词。Git版本2.13引入了新的动词,使其与pop更加一致,并为创建命令添加了更多选项。Git版本2.16正式弃用了旧的动词(尽管它在Git 2.23中仍然有效,这是我编辑本文时的最新版本)。
pop
--merge
-m
git checkout
git checkout -m <another-branch>
- m -合并 当切换分支时,如果您对一个或多个文件的本地修改在当前分支和 要切换到的分支,该命令拒绝切换 分支,以便在上下文中保存您的修改。然而, 使用此选项,将在当前分支和您的分支之间进行三向合并 工作树的内容,新分支完成后,您将进入
- m -合并
当切换分支时,如果您对一个或多个文件的本地修改在当前分支和 要切换到的分支,该命令拒绝切换 分支,以便在上下文中保存您的修改。然而, 使用此选项,将在当前分支和您的分支之间进行三向合并 工作树的内容,新分支完成后,您将进入
来源:https://git-scm.com/docs/git-checkout
你可以使用:
git checkout <your-branch>
当您想要暂时保存未完成或凌乱的工作,而又想在另一个分支上做一些事情时,Git stash非常有用。
git -stash文档