git交换机在不放弃本地更改的情况下进行分支

git交换机在不放弃本地更改的情况下进行分支,git,git-branch,Git,Git Branch,好吧,假设有一天我们碰巧做了一系列修改,当我们去提交它们时,我们注意到我们在处理错误的分支 我们如何强制git切换分支而不放弃本地更改 在我等待答复的时候,我可能会以一种天真的方式去做这件事,但我想知道是否有一个正确的程序,因为如果我说我以前没有发生过这种事情,我是在撒谎 备份更改回购 git重置——硬 git签出右分支 恢复更改 git提交-m“更改” git stash保存未限制的更改 git隐藏列表列出保存的未限制隐藏 git stash apply stash@{x}其中x可以是0,

好吧,假设有一天我们碰巧做了一系列修改,当我们去提交它们时,我们注意到我们在处理错误的分支

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

在我等待答复的时候,我可能会以一种天真的方式去做这件事,但我想知道是否有一个正确的程序,因为如果我说我以前没有发生过这种事情,我是在撒谎

  • 备份更改回购
  • git重置——硬
  • git签出右分支
  • 恢复更改
  • git提交-m“更改”
      • git stash
        保存未限制的更改
      • git隐藏列表
        列出保存的未限制隐藏
      • git stash apply stash@{x}
        其中x可以是0,1,2..您所做的任何隐藏
      使用git存储

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

      git stash apply
      
      您甚至可以将单个项目拉出。要彻底清除藏匿物:

      git stash clear
      
      $ git checkout develop
      Switched to branch 'develop'
      $ git stash apply
      
      您可以:

      • 使用
        git stash
        搁置更改或

      • 创建另一个分支并在那里提交更改,然后将该分支合并到工作目录中


      根据您所走的路有多远以及您希望他们在哪个分支上,有很多不同的方法

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

      $ git checkout master
      ... pause for coffee, etc ...
      ... return, edit a bunch of stuff, then: oops, wanted to be on develop
      
      因此,现在您希望这些尚未提交给
      master
      的更改位于
      develope

    • 如果您还没有
      develope
      ,那么该方法很简单:

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

    • 您确实有一个
      开发
      。看看Git是否允许您在没有 做任何事:

      $ git checkout develop
      

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

      最简单的可能是
      git stash
      (与所有其他答案一样) 这比我想的还要快(帖子说)。运行
      git stash save
      git stash push
      ,1或只运行简单的
      git stash
      ,它是
      save
      /
      push的缩写:

      $ git stash
      
      这将使用 一种奇怪的非分支y方法。它所做的承诺不是“在”任何 分支,但现在安全地存储在存储库中,因此您现在可以 切换分支,然后“应用”隐藏:

      git stash clear
      
      $ git checkout develop
      Switched to branch 'develop'
      $ git stash apply
      
      如果一切顺利,并且您喜欢结果,那么您应该
      git stash drop
      the stash。这将删除对奇怪的非分支-y提交的引用。(它们仍然在储存库中,有时可以在急诊科检索,但大多数情况下,你应该认为它们在那一点消失了)
      apply
      步骤使用Git强大的底层合并机制合并隐藏的更改,与执行分支合并时使用的方法相同。这意味着,如果您错误地处理的分支与您要处理的分支完全不同,则可能会出现“合并冲突”。因此,在假设隐藏应用干净之前,最好仔细检查结果,即使Git本身没有检测到任何合并冲突

      许多人使用
      git-stash-pop
      ,这是
      git-stash-apply和&git-stash-drop
      的缩写。就目前而言,这没什么,但这意味着,如果应用程序结果一团糟,并且您决定不想继续沿着这条路走下去,那么就无法轻松地取回存储。这就是为什么我建议单独的
      应用
      ,检查结果,
      只有在满足要求时才删除
      。(当然,这也带来了另一个问题,你可以休息一下,忘记自己在做什么,回来做错事,所以这不是一个完美的治疗方法。)


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

      您可以使用
      --merge
      /
      -m
      Git checkout
      选项:
      git checkout-m

      您可以使用:

    • git stash
      保存您的工作
    • git签出
    • git stash apply
      git stash pop
      加载您最后的工作

    • 当您想临时保存未完成或混乱的工作,而您想在另一个分支上执行某些操作时,Git stash非常有用


      git stash
      如果我想切换到另一个分支而不提交到当前分支(例如,更改未完成),然后切换回继续进行,该怎么办?@stt106:您仍然必须提交,但您可以通过
      git stash
      执行此操作,就像在本答案和其他答案中一样,通过
      git stash
      ,以便
      git stash
      的提交,在一个不寻常的安排下,每个隐藏条目都会有两次提交。不过,除了非常短期的特殊情况外,我通常更喜欢进行正常的提交。稍后,您可以
      git reset--soft
      git reset--mixed
      ,或者使用
      git commit--amend
      在重新处理该分支时将其推到一边。(在现代Git中,您还可以使用
      Git worktree add
      ,这可能是一个更好的解决方案。)“这要么成功,要么抱怨。”。签出成功或错误的原因是什么?@nanocv:see@Brian:
      git stash
      just make com