2011-08-27 64 views
7

我在我的主分支的孩子中有一些不需要的git提交。我对一个功能分支进行了重新绑定,并成功合并了导致产生的一些冲突,但是我没有意识到,重新分配不会让我在功能分支上。如果我现在检查一下功能分支,它大概会覆盖我在工作树中所做的更改,使它们处于某种程度的不稳定状态。我可以“git checkout -m”,但这显然只用于合并未提交的本地更改。我如何才能进入功能分支,并保留我目前在主分支下的未经承诺但已承诺的更改(无需将它们推送到主分支)?我应该使用git rebase - 去吗?如果是这样,我现在应该做些什么,我已经重新启动了-onto?如何将已提交但未修改的更改移至另一个分支?

+0

不是一个笨蛋。这是一个非常不同的问题,已经发生了变化,更不用说已经经历了一个不正确的rebase。 –

回答

7

你可以这样说:

  1. git checkout branch签出特性分支。
  2. git reset --hard master现在将分支移动到与master相同的提交。通过这样做,您将失去分支中的所有提交。由于你的基金会,所有这些承诺应该有master副本,所以你不应该失去任何东西。
  3. git checkout master结帐master
  4. git reset --hard origin/mastermaster重置为origin回购的状态。这假定您没有对master进行任何改动。如果是这样,请用您要重置为的提交ID替换origin/master
+0

“你失去了分支中的所有提交...”我不遵循这个部分。我的目标是通过将他们移动到特性分支来保持我的未完成提交。 “这个假设你没有对主人进行任何改动”。再一次,没有提交的提交是我问我问题的全部原因。 – BrianHoltz

+0

我看到我想要做的是在git-reset手册页中的“撤消提交,使其成为主题分支”中描述。 – BrianHoltz

+0

BrianHoltz提到的git手册页在这里:http://git-scm.com/docs/git-reset/2.0.0#_examples –

3

首先重申你的情况,以确保我的理解正确。你在master上做了一些提交,并且想把它们移动到feature,所以你跑git rebase feature?首先,你想撤消这个。假设您还有master已签出,并且没有进行任何rebase,请运行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 

这将是一个快进合并,因为你刚刚重建基础。

相关问题