我一直在进行一个项目,但不幸的是,我忘记了切换分支,因此一直在主分支上工作。
我该如何将我在这里完成的工作(3个文件)从主分支复制到我的分支(例如叫做branch123),而不需要向主分支提交代码?
我一直在进行一个项目,但不幸的是,我忘记了切换分支,因此一直在主分支上工作。
我该如何将我在这里完成的工作(3个文件)从主分支复制到我的分支(例如叫做branch123),而不需要向主分支提交代码?
git stash
git checkout branch123
git stash apply
然后你应该回到自己的分支,不要碰主分支。
接受的答案最为详尽,但有一种特殊情况可以简化。如果你在工作目录中修改的文件在master
和branch123
中都是相同的,那么你可以简单地执行以下操作:
git checkout branch123
不需要隐藏任何东西,因为checkout
的默认行为是不覆盖你工作目录中已修改的文件,所以你不会失去任何东西。(实际上,这是Cascabel在评论中首先提到的)
正如其他人在评论中提到的那样,如果branch123
还不存在,你可以执行以下操作
git checkout -b branch123
根据我在这里找到的信息。git checkout -b newbranch
。该命令会在切换到新的分支的同时创建该分支。 - Phil Mitchellmaster
和branch123
中不相同。请参见我的编辑答案。 - Russel Dirks由于在检出文件时无法创建新分支但无法检出现有分支,我发现使用临时分支进行工作的以下技巧:
这种情况至少适用于VS 2015 Git插件,但很可能适用于任何git工具。
编辑:我发现在执行合并之前,您需要对临时分支执行一次变基(git rebase --onto)。否则,主分支中的更改将包含在合并中。这是上面额外的第3.5步。有关变基的更多信息,请参见此处: https://git-scm.com/book/en/v2/Git-Branching-Rebasing
stash
保存本地修改,然后stash apply
将它们恢复回来。 - Cascabelgit reset --hard HEAD
,你将回到最后一次提交到主分支的状态。 - gnab