gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:19:05 26 4
gpt4 key购买 nike

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

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

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

  • 备份更改的repo
  • git reset --hard
  • git checkout 右分支
  • 恢复更改
  • git commit -m "changes"

最佳答案

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

让我们来看一个典型的错误:

$ 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. 确实有开发。看看 Git 是否会让你在没有的情况下切换做任何事:

    $ git checkout develop

    这要么成功,要么报错。如果成功了,太好了!只是犯罪。如果不是(错误:您对以下文件的本地更改将被覆盖...),您仍然有很多选择。

    最简单的可能是 git stash(和所有其他回答者一样这让我不得不点击 post 说)。运行 git stash savegit stash push1 或只是 git stash 的缩写 保存/推送:

    $ git stash

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

    $ git checkout develop
    Switched to branch 'develop'
    $ git stash apply

    如果一切顺利,并且您喜欢结果,那么您应该 git stash drop 存储。这会删除对奇怪的非分支 y 提交的引用。 (它们仍然在存储库中,有时可以在紧急情况下取回,但对于大多数用途,您应该认为它们在此时已经消失。)

apply 步骤 merge stash 的更改,使用 Git 强大的底层 merge 机制,这与您进行分支 merge 时使用的是同一种东西。这意味着如果您错误地处理的分支与您打算处理的分支有很大不同,您可能会遇到“merge 冲突”。因此,在假设存储应用干净之前,仔细检查结果是个好主意,即使 Git 本身没有检测到任何 merge 冲突也是如此。

许多人使用 git stash pop,它是 git stash apply && git stash drop 的简写。就目前而言这很好,但这意味着如果应用程序导致一团糟,并且您决定不想继续沿着这条路前进,那么您将无法轻易取回 stash 的东西。这就是为什么我建议单独 apply,检查结果,drop 仅当/当满意时。 (这当然会引入另一个点,您可以再喝杯咖啡休息一下,然后忘记自己在做什么,然后回来做的事情,所以这不是一个完美的治疗方法。)


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

关于git 切换分支而不丢弃本地更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22082307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com