Git混淆与储藏弹出

3

我现在有些问题,我正在使用git flow,并创建了一个名为feature/newbranch的功能,我正在开发中。我想要暂存我的更改并保存到feature/newbranch,所以我认为我需要做的就是:

git stash  (in develop)
git checkout 'feature/newbranch'
git stash pop

这会将更改放在我的新分支中,但当我切换到 develop 分支时

git checkout develop

我的所有变更都还在那里,我做错了什么吗?
3个回答

3

在提交之前,任何内容都不会放入分支。您正在做的是将存储内容放入工作树。

阅读以下问题的顶部答案,您将更好地了解: Git中HEAD / Working Tree / Index的区别


是的,谢谢。看起来我之前对它的工作方式有些误解。以前只是靠运气提交了代码,而没有理解工作树的概念。谢谢! - mkral

2

未提交的更改仅存在于工作目录中,不与特定分支绑定。 如果您想将存储的更改应用于分支,请使用git stash apply而不是git stash pop。 git stash pop会自动丢弃最近的存储,而git stash apply仅应用它,但不删除它。


谢谢,那很有道理,但我并没有遇到pop与apply的问题。我只需要提交我的更改。我想我理解git的程度比我想象的要少。 - mkral
@mkral:你写道你只想暂存它们而不是提交它们。如果你想要保留这个存储,就不要运行 git stash pop 命令。我有遗漏什么吗? - knittl
不,你关于那点是正确的。我用词不当,强调了“没有提交”。但是由于我对git的误解,这不是我的本意。我会编辑问题来排除那一点。对于误解我感到抱歉。 - mkral

2
不,git stash pop只会尝试应用你上次使用git stash保存的补丁/更改。它不会提交任何更改到当前分支。如果你的工作目录脏了,即使你切换分支,它仍将保持脏。有时由于工作目录脏,你甚至无法切换分支。
要在切换分支之前清除当前的工作目录,你应该执行git reset --hard

好的,谢谢。我想这完全有道理。如果我需要切换回develop分支,我基本上没有提交文件,否则它应该可以工作? - mkral
是的,您已经提交了一个新的提交到开发分支,允许切换到feature/newbranch的最后一个提交。 - André Oriani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接