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

436

我一直在进行一个项目,但不幸的是,我忘记了切换分支,因此一直在主分支上工作。

我该如何将我在这里完成的工作(3个文件)从主分支复制到我的分支(例如叫做branch123),而不需要向主分支提交代码?

5个回答

738
听起来你只需要以下内容:
git stash
git checkout branch123
git stash apply

然后你应该回到自己的分支,不要碰主分支。


6
好的,我会尽力进行翻译。请问您需要将以下内容翻译成中文:ok- i ran that, but when i switch back to master (git checkout master) and run git status, the same files are still "modified" - is that expected? - Alex
8
如果你本地修改的文件与当前分支(master)和主题分支(branch123)之间的差异不在同一文件中,那么你可能无需进行隐藏操作。在这种情况下,Git会允许你简单地切换到主题分支。 - Cascabel
4
@Alex:是的,那是预期的。这不涉及提交。stash 保存本地修改,然后 stash apply 将它们恢复回来。 - Cascabel
8
我该如何从主分支中“摆脱”它们,以保持干净? - Alex
12
运行命令 git reset --hard HEAD,你将回到最后一次提交到主分支的状态。 - gnab
显示剩余7条评论

71

接受的答案最为详尽,但有一种特殊情况可以简化。如果你在工作目录中修改的文件在masterbranch123中都是相同的,那么你可以简单地执行以下操作:

git checkout branch123

不需要隐藏任何东西,因为checkout的默认行为是不覆盖你工作目录中已修改的文件,所以你不会失去任何东西。(实际上,这是Cascabel在评论中首先提到的)

正如其他人在评论中提到的那样,如果branch123还不存在,你可以执行以下操作

git checkout -b branch123
根据我在这里找到的信息。

4
如果你想创建一个新的分支,可以使用命令 git checkout -b newbranch。该命令会在切换到新的分支的同时创建该分支。 - Phil Mitchell
2
这对我来说比stash更好用,而且更容易。谢谢! - Matthias
38
不行,Git会显示这样的消息:"commit your changes or stash them before you can switch branches."意为“在切换分支之前,请提交您的更改或将它们存储到暂存区。”请注意不要修改原文意思。 - dsharew
2
@DegenSharew:是的,在某些情况下你是正确的,即如果你在工作目录中修改的文件在masterbranch123中不相同。请参见我的编辑答案。 - Russel Dirks
1
这对我非常有效。我还没有创建分支,所以我执行了以下操作:git checkout -b newbranchname。我的更改自动显示在该分支中。 - dex3703
显示剩余2条评论

6

0

由于在检出文件时无法创建新分支但无法检出现有分支,我发现使用临时分支进行工作的以下技巧:

这种情况至少适用于VS 2015 Git插件,但很可能适用于任何git工具。

  1. 检出并更改主分支中的文件(哎呀!,错误的分支)
  2. 从主分支创建一个新分支“temp”(或您选择的任何未使用的名称)。 检出的文件现在将在temp而不是master中检出。
  3. 将更改检入temp(master未受影响)
  4. 现在已经全部检入,可以检出现有分支。 检出所需的分支(我想要开始更改的分支) 3.5 Git Rebase
  5. 将temp合并到所需的分支。 现在更改已在正确的分支中。
  6. 删除temp分支,因为它不再需要

编辑:我发现在执行合并之前,您需要对临时分支执行一次变基(git rebase --onto)。否则,主分支中的更改将包含在合并中。这是上面额外的第3.5步。有关变基的更多信息,请参见此处: https://git-scm.com/book/en/v2/Git-Branching-Rebasing


您能否详细阐述一下您的答案,并对您提供的解决方案进行更多描述? - abarisone
感谢您的反馈。解决方案非常简单,遵循与“stash”解决方案相同的原则,只是使用临时分支而不是stash。这对于Visual Studio用户来说更加方便,因为GIT插件不支持stash。 - Pasi

0

Github桌面版

在Github桌面版中,当创建一个新分支或移动到另一个带有未提交更改的分支时,会询问您是否要放弃更改或移动它们到新分支:

enter image description here


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