我的主分支机构的孩子有一些未经提交的git提交。我对一个功能分支进行了改动,并成功合并了所产生的一些冲突,但我没有意识到rebase不会让我留在功能分支上。如果我现在git checkout功能分支,它可能会覆盖我在工作树中提交的更改,使它们处于某种不确定状态。我可以“git checkout -m”,但这显然只是用于合并未提交的本地更改。我如何进入功能分支并保留我目前在主分支下的未经删除但已提交的更改(不将其推送到主分支)?我应该使用git rebase -onto吗?如果是这样的话,我现在应该怎么做才能在没有-onto的情况下重新定位?
答案 0 :(得分:8)
你可以这样做:
git checkout branch
结帐功能分支。git reset --hard master
立即将分支移动到与master
相同的提交。通过这样做,您将丢失分支中的所有提交。由于你的rebase,所有这些提交都应该在master
上有副本,所以你实际上不应该丢失任何东西。git checkout master
结帐master
。git reset --hard origin/master
将master
重置为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
这是一个快速合并,因为你刚刚重新定位。