如何将已提交但未刷新的更改移动到另一个分支?

时间:2011-08-27 22:05:26

标签: git

我的主分支机构的孩子有一些未经提交的git提交。我对一个功能分支进行了改动,并成功合并了所产生的一些冲突,但我没有意识到rebase不会让我留在功能分支上。如果我现在git checkout功能分支,它可能会覆盖我在工作树中提交的更改,使它们处于某种不确定状态。我可以“git checkout -m”,但这显然只是用于合并未提交的本地更改。我如何进入功能分支并保留我目前在主分支下的未经删除但已提交的更改(不将其推送到主分支)?我应该使用git rebase -onto吗?如果是这样的话,我现在应该怎么做才能在没有-onto的情况下重新定位?

2 个答案:

答案 0 :(得分:8)

你可以这样做:

  1. git checkout branch结帐功能分支。
  2. git reset --hard master立即将分支移动到与master相同的提交。通过这样做,您将丢失分支中的所有提交。由于你的rebase,所有这些提交都应该在master上有副本,所以你实际上不应该丢失任何东西。
  3. git checkout master结帐master
  4. git reset --hard origin/mastermaster重置为origin个回购中的状态。这假设您没有对master进行任何未按下的更改。如果您这样做,请将origin/master替换为您要重置为的提交ID。

答案 1 :(得分:3)

首先要重申你的情况,以确保我理解正确。您在master上进行了一些提交,并希望将其移至feature,以便您运行git rebase feature?首先,你要撤消它。假设您仍然签出了master,并且之后没有进行任何更改,请运行git reset --hard ORIG_HEAD来撤消rebase。

现在,以正确的方式将提交移至feature分支。制作并结帐临时分支,这样就不会弄乱master

git checkout -b temp

现在将自origin/master上次提交以来所做的所有更改重新绑定到feature

git rebase --onto feature origin/master

这会移动temp分支,就像它从feature分支一样。现在将更改合并到feature,执行:

git checkout feature
git merge temp
git branch -d temp

这是一个快速合并,因为你刚刚重新定位。