Git 如何将已提交但未推送的更改移动到另一个分支?
我在我们的主分支的孩子身上有一些未经催促的git提交。我对一个功能分支进行了重新基化,并成功地合并了导致的一些冲突,但我没有意识到重新基化不会将我留在功能分支上。如果我现在git签出特性分支,它可能会覆盖我在工作树中提交的更改,使它们处于某种状态。我可以使用“git checkout-m”,但这显然只是用于合并未提交的本地更改。我如何进入功能分支并保持我当前在主分支下的未推送但已提交的更改(而不将它们推送到主分支)?我应该使用git-rebase-on吗?如果是这样的话,我现在应该怎么做呢?我已经重新设置了无-上的基础。您可以这样做:Git 如何将已提交但未推送的更改移动到另一个分支?,git,Git,我在我们的主分支的孩子身上有一些未经催促的git提交。我对一个功能分支进行了重新基化,并成功地合并了导致的一些冲突,但我没有意识到重新基化不会将我留在功能分支上。如果我现在git签出特性分支,它可能会覆盖我在工作树中提交的更改,使它们处于某种状态。我可以使用“git checkout-m”,但这显然只是用于合并未提交的本地更改。我如何进入功能分支并保持我当前在主分支下的未推送但已提交的更改(而不将它们推送到主分支)?我应该使用git-rebase-on吗?如果是这样的话,我现在应该怎么做呢?我已
git签出分支
以签出要素分支git reset--hard master
立即将分支移动到与master
相同的提交位置。这样做会丢失分支中的所有提交。由于您的rebase,所有这些提交都应该在master
上有副本,所以您实际上不应该丢失任何东西git checkout master
到checkoutmaster
git reset——硬原点/master
将master
重置为原点repo上的状态。这假设您没有对主控
进行任何未推送的更改。如果这样做,请用要重置为的提交id替换origin/master
首先重申你的情况,以确保我理解正确。您在
master
上做了一些提交,并希望将它们移动到feature
,所以您运行了git-rebase feature
?首先,您要撤消该操作。假设您仍然签出了master
,并且从那时起没有做过任何重设,请运行git reset--hard ORIG_HEAD
来撤消重设
现在,了解将提交转移到功能
分支的正确方法。创建并签出一个临时分支,这样您就不会弄乱主分支
git checkout -b temp
现在,将自上次提交以来在origin/master
上所做的所有更改重新设置到功能上:
git rebase --onto feature origin/master
移动temp
分支,就好像它是从功能中分支出来的一样。现在,要将更改合并到功能
,请执行以下操作:
git checkout feature
git merge temp
git branch -d temp
这将是一个快进合并,因为您刚刚重新设置了基础。“您丢失了分支中的所有提交…”我不理解这一部分。我的目标是通过将未推送的提交移动到功能分支来保持它们。“这假设您没有对主控形状进行任何未推送的更改”。同样,未推送提交是我问问题的全部原因。我看到git reset手册页中“撤消提交,使其成为主题分支”下描述了我想做的事情BrianHoltz提到的git手册页在这里:小注:在我的例子中,我想在master上开始工作并意外地在那里提交之后,将提交移动到一个新的分支。为此,您可以使用git checkout-b new branch
作为步骤1(将-b
标志添加到git checkout
创建一个新分支)并跳过步骤2(因为您已经与主分支处于同一提交状态)。而不是重复。对于已经提交的更改来说,这是一个非常不同的问题,更不用说已经经历了错误的重新基址。