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

问题描述 投票:0回答:6

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

我们如何强制 git 切换分支而不丢弃本地更改

在等待回复时,我可能会以一种天真的方式解决这个问题,但我想知道是否有正确的程序,因为如果我说这之前没有发生在我身上,我就是在撒谎。 .

  • 备份更改的存储库
  • git reset --hard
  • git checkout right-branch
  • 恢复更改
  • git commit -m "changes"
git git-branch
6个回答
569
投票

有很多不同的方法,具体取决于您的进度以及您希望它们位于哪个分支。

让我们来看看一个经典错误:

$ git checkout master
... pause for coffee, etc ...
... return, edit a bunch of stuff, then: oops, wanted to be on develop

所以现在您希望将这些尚未承诺的更改

master
进行
develop

  1. 如果您还没有

    develop
    ,该方法很简单:

    $ git checkout -b develop
    

    这将创建一个新的

    develop
    分支,从您所在的位置开始 现在。 现在你可以提交了,新的东西都在
    develop

  2. 确实有一个

    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
    

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

    $ 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 中仍然有效,这是我编辑本文时的最新版本)。
    


91
投票

git stash

它将更改推送到堆栈。当你想把它们拉回来时使用

git stash apply

您甚至可以将单个物品拉出。

彻底清除藏匿物:

git stash drop



52
投票

    git stash
  1. 保存您的工作
  2. git checkout <your-branch>
  3. git stash apply
  4. git stash pop
    加载您最后的作品
当您想暂时保存未完成或混乱的工作,同时又想在另一个分支上执行某些操作时,Git stash 非常有用。

git -stash 文档


29
投票
    git stash
  • 保存未提交的更改
  • git stash list
  • 列出您保存的未提交的存储
  • git stash apply stash@{x}
  • ,其中 x 可以是 0,1,2..您已创建的存储数量
    
        

12
投票
--merge

/

-m
git checkout
选项:
git checkout -m <another-branch>

-m --合并

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

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


7
投票

    使用
  • git stash

    搁置您的更改,或者,

    
    

  • 创建另一个分支并在其中提交更改,然后将该分支合并到您的工作目录中
© www.soinside.com 2019 - 2024. All rights reserved.