git交换机在不放弃本地更改的情况下进行分支
好吧,假设有一天我们碰巧做了一系列修改,当我们去提交它们时,我们注意到我们在处理错误的分支 我们如何强制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提交-m“更改”
保存未限制的更改git stash
列出保存的未限制隐藏git隐藏列表
其中x可以是0,1,2..您所做的任何隐藏git stash apply stash@{x}
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
的缩写。就目前而言,这没什么,但这意味着,如果应用程序结果一团糟,并且您决定不想继续沿着这条路走下去,那么就无法轻松地取回存储。这就是为什么我建议单独的应用
,检查结果,只有在满足要求时才删除
。(当然,这也带来了另一个问题,你可以休息一下,忘记自己在做什么,回来做错事,所以这不是一个完美的治疗方法。)
1git 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