我已经做了相当多的工作(“你的分支比'origin/master'领先37次提交”),这些工作实际上应该放到它自己的分支中,而不是放到master中。这些提交只存在于我的本地机器上,还没有被推送到原点,但情况有点复杂,因为其他开发人员已经推送到原点/master,而我已经提取了这些更改。

我如何追溯我的37个本地提交到一个新的分支?根据文档,git似乎是基于my-new-branch master或…origin/master应该这样做,但两者都只给我错误“致命:需要一个单一的修订”。man git-rebase没有提到提供rebase的修订,它的示例也没有这样做,所以我不知道如何解决这个错误。

(注意,这不是移动现有的,未提交的工作到一个新的Git分支或如何合并我的本地未提交的更改到另一个Git分支的副本?因为这些问题处理的是本地工作树中未提交的更改,而不是已提交的更改。)


当前回答

是什么:

来自当前HEAD的分支。 确保你在master上,而不是你的新分支上。 Git重置回你开始修改之前的最后一次提交。 Git拉重新拉只是远程更改你扔掉了复位。

或者当您尝试重新合并分支时,它会爆炸吗?

其他回答

是什么:

来自当前HEAD的分支。 确保你在master上,而不是你的新分支上。 Git重置回你开始修改之前的最后一次提交。 Git拉重新拉只是远程更改你扔掉了复位。

或者当您尝试重新合并分支时,它会爆炸吗?

或者,在你提交到错误的分支之后,执行以下步骤:

git日志 Git diff{前一次提交}{最近一次提交}> your_changes.patch Git重置-hard origin/{你的当前分支} Git checkout -b{新分支} Git应用your_changes.patch

我可以想象,对于第一步和第二步,有一个更简单的方法。

我被同一个问题困住了。我找到了一个最简单的解决方案,我想和大家分享。

1)使用您的更改创建新的分支。

git checkout -b mybranch

2)(可选)在远程服务器上推送新的分支代码。

git push origin mybranch

3)退到主分支。

git checkout master

4)重置主分支代码与远程服务器和删除本地提交。

git reset --hard origin/master

这里有一个更简单的方法:

创建一个新分支 在你的新分支上做一个git merge master-这将合并你提交的(不是推送的)更改到你的新分支 删除本地主分支git branch -D master使用-D而不是-D,因为你想强制删除分支。 只要在你的主分支上做一个git取回,并在你的主分支上做一个git拉,以确保你有你的团队的最新代码。

对我来说,这是最好的方法:

检查更改和合并冲突git获取 创建一个新的分支git分支my-changes并推送到远程 将上游改为新创建的分支git master -u upstream-branch remotes/origin/my-changes 将提交推到新的上游分支。 切换回之前的上游git分支master——set-upstream-to remotes/origin/master