Git切换分支而不丢弃本地更改

好吧,假设有一天我们碰巧做了一堆修改,当我们提交它们时,我们注意到我们在错误的分支上工作。

我们如何强迫git切换分支不丢弃局部更改

在等待回复的过程中,我可能会以一种天真的方式谈论这个问题,但我想知道是否有正确的程序,因为如果我说我以前没有遇到过这种情况,那我就是在撒谎……

  • 备份更改的回购
  • git reset --hard
  • git checkout right-branch
  • 恢复的变化
  • git commit -m "changes"
234718 次浏览
  • git stash保存未提交的更改
  • git stash list列出你保存的未提交的存储
  • git stash apply stash@{x},其中x可以是0,1,2..没有你藏过的东西

使用git stash

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上。

  1. 如果你没有 a develop,该方法是平凡的:

    $ git checkout -b develop
    
    这将创建一个新的develop分支,从你所在的位置开始 现在。现在你可以提交了,新东西都在develop上。

  2. 确实有 a develop。看看Git是否会让你切换 做任何事:< / p >

    $ git checkout develop
    
    这将要么成功,要么抱怨。如果成功了,那太好了!只是 提交。如果不是(error: Your local changes to the following files would be overwritten ...),你仍然有很多选项 最简单的可能是git stash(和所有其他答案一样) 打败我点击帖子说)。运行git stash savegit stash push1或简单的git stash,这是save / push的缩写:

    $ git stash
    

    这提交你的代码(是的,它确实做了一些提交)使用 一个奇怪的非分支方法。它所做的提交不是“在”任何上 分支,但现在安全地存储在存储库中,所以您现在可以 切换分支,然后“应用”stash:

    $ 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仅当/当满意时。(当然,这确实引入了另一个点,你可以再喝一杯咖啡休息一下,忘记你在做什么,回来,做错误的的事情,所以这不是一个完美的治疗。)


__abc3 git stash save中的save是创建一个新收藏的旧动词。Git版本2.13引入了新的动词,使其与pop更加一致,并为创建命令添加了更多选项。Git版本2.16正式弃用了旧的动词(尽管它在Git 2.23中仍然有效,这是我编辑本文时的最新版本)。

你可以使用--merge/-m git checkout选项: git checkout -m <another-branch> < / p >

- m -合并

当切换分支时,如果您对一个或多个文件的本地修改在当前分支和 要切换到的分支,该命令拒绝切换 分支,以便在上下文中保存您的修改。然而, 使用此选项,将在当前分支和您的分支之间进行三向合并 工作树的内容,新分支完成后,您将进入

来源:https://git-scm.com/docs/git-checkout

你可以使用:

  1. git stash 保存您的工作
  2. git checkout <your-branch>
  3. __abc0 __abc2 __abc1 __abc3

当您想要暂时保存未完成或凌乱的工作,而又想在另一个分支上做一些事情时,Git stash非常有用。

git -stash文档