Git - 在错误的分支上工作 - 如何将更改复制到现有主题分支

Ale*_*lex 311 git

我一直在做一个项目,但不幸的是,我了切换到我的分支,因此一直在做主人

如何将我在这里完成的工作(3个文件)从master转移到我的分支(称为例如branch123)而不需要掌握?

gna*_*nab 509

听起来你需要的是以下内容:

git stash
git checkout branch123
git stash apply
Run Code Online (Sandbox Code Playgroud)

然后你应该回到你自己的分支而不接触主分支.

  • `git reset --hard HEAD`然后你回到你对主分支的最后一次提交. (6认同)
  • 好吧 - 我跑了,但是当我切换回master(git checkout master)并运行git status时,相同的文件仍然被"修改" - 这是预期的吗? (5认同)
  • 如果当前分支(主)和主题分支(branch123)之间的差异不在您本地修改的任何文件中,则实际上可能不必存储.在这种情况下,Git会让你简单地查看主题分支. (5认同)
  • 我怎样才能从主分支"摆脱"他们......保持干净? (5认同)
  • @Alex:是的,这是预期的.这不涉及提交.`stash`保存了本地修改,然后`stash apply`将它们带回来. (3认同)
  • 可能已经说过,但是只有在您没有对更改进行 git add 和/或 git commit 时,存储才会起作用。如果您已经将更改提交到错误的分支,则必须在开始更改之前重置回提交,进行“软”重置,以便保留所有更改,git checkout -b “newBranch”,然后提交您对该分支的更改。 (3认同)
  • `git stash` 不应留下任何“修改过的”文件。当你说“修改”时,我认为你的意思是由 git 跟踪的文件,即你之前提交过的文件?另一方面,未跟踪的文件将被“git stash”排除,并且无论您当前位于哪个分支,都将显示为未跟踪。 (2认同)

Rus*_*rks 43

这是一个古老的问题,但它是谷歌"在错误的分支上工作"的首要问题.我认为更好的答案是简单地检查您想要处理的分支机构.不需要藏匿任何东西:

git checkout branch123
Run Code Online (Sandbox Code Playgroud)

默认行为master是不覆盖工作目录中的已修改文件,因此您不会丢失任何内容.基于我在这里找到的东西.

编辑: 如果你在工作目录中修改的文件是在两个相同的这种方法才有效branch123checkout.Jefromi在对已接受答案的评论中实际指出了这一点,但我第一次看到它时并不明白他在说什么.

  • 不,这不起作用.Git会向您显示以下消息:"在切换分支之前提交更改或存储它们." (31认同)
  • 或者,如果你想创建一个新的分支,`git checkout -b newbranch` (3认同)
  • 这对我来说比隐藏更好,而且容易得多。谢谢! (2认同)
  • @DegenSharew:是的,在某些情况下您是对的,即如果您在工作目录中修改的文件在`master`和`branch123`中不相同。请参阅我编辑的答案。 (2认同)

Roe*_*rel 6

git stash 是你需要的.

可以在Git-Tools-Stashing中找到完整的解释