因此,我在存储库中做了一些工作,当我准备提交时,我意识到我目前不在任何分支上。

当使用子模块时,这种情况经常发生,我能够解决它,但这个过程很乏味,我一直在想,一定有一种更简单的方法来做到这一点。

是否有一种简单的方法可以在保持更改的同时回到分支上?


当前回答

以下方法可能有效:

git rebase HEAD master
git checkout master

这将使你当前的HEAD改变基于master的顶部。然后你可以切换分支。


另一种方法是先签出分支:

git checkout master

然后Git应该显示你的分离提交的SHA1,然后你可以樱桃选择他们,例如。

git cherry-pick YOURSHA1

或者你也可以合并最新的一个:

git merge YOURSHA1

要查看来自不同分支的所有提交(以确保您拥有它们),请运行:git reflog。

其他回答

这帮助了我

git checkout -b newbranch
git checkout master
git merge newbranch
git branch -d newbranch

我知道我在2012年告诉过babay,我认为不太可能有人不会意识到他们不在一个分支上并做出承诺。这件事刚刚发生在我身上,所以我想我必须承认我错了,但考虑到直到2016年这件事才发生在我身上,你可以说这实际上不太可能。

无论如何,在我看来,创建一个新的分支是多余的。你所要做的就是:

git checkout some-branch
git merge commit-sha

如果你在签出另一个分支之前没有复制commit-sha,你可以通过运行以下命令轻松找到它:

git reflog

我最近又遇到了这个问题。距离我上次使用子模块已经有一段时间了,在了解了更多关于git的知识后,我意识到只要检查出你想提交的分支就足够了。Git将保留工作树,即使您不隐藏它。

git checkout existing_branch_name

如果你想在一个新的分支上工作,这应该对你有用:

git checkout -b new_branch_name

如果你在工作树中有冲突,签出将失败,但这应该是相当不寻常的,如果发生这种情况,你可以隐藏它,弹出它并解决冲突。

与公认的答案相比,这个答案将节省您执行两个命令的时间,这两个命令执行起来并不需要太长时间。因此,我不会接受这个答案,除非它奇迹般地获得了比目前接受的答案更多的赞(或至少接近)。

我发现最好的方法是把我修改过的文件复制到一个单独的文件夹, 然后删除我电脑上现有的存储库文件夹, 然后克隆主存储库并放回文件。

另一种方式

git branch newbranch
git checkout master 
git merge newbranch