2011-08-27 11 views
7

私はmasterブランチの私の子供の中にいくつかの非コミットgitコミットを持っています。フィーチャーブランチへのリベースを行い、その結果生じたいくつかのコンフリクトを正常にマージしましたが、リベースがフィーチャーブランチに残らないことに気付きませんでした。機能ブランチをチェックアウトすると、私の作業ツリーにコミットされた変更が上書きされ、何らかのリムボウが残されている可能性があります。私は "git checkout -m"できましたが、明らかにコミットされていないローカル変更をマージするためだけです。フィーチャーブランチに入って、マスターブランチの下にある(マスターブランチにプッシュしないで)私が現在持っている未確定コミットされた変更をどのように保つことができますか?私はgit rebase -ontoを使用する必要がありますか?もしそうなら、私は今、私はトントを使わずにリベースしたのですか?コミットされていない変更を別のブランチに移動する方法は?

+0

詐欺ではありません。すでにコミットされている変更とはまったく異なる問題です。間違ったリベースを行ったことはもちろんですが、 –

答えて

7

あなたはこのようにそれを行うことができます。機能ブランチをチェックアウトする

  1. git checkout branch
  2. git reset --hard master今はmasterと同じコミットにブランチを移動します。これを行うと、ブランチにあるすべてのコミットが失われます。あなたのrebaseのため、コミットはすべてmasterにコピーする必要がありますので、実際に何かを失うべきではありません。
  3. git checkout master to checkout master
  4. git reset --hard origin/mastermasteroriginレポの状態にリセットします。これは、masterの未処理の変更がないことを前提としています。その場合は、origin/masterを、リセットするコミットIDに置き換えてください。
+0

"ブランチにあるすべてのコミットを失う..."私はこの部分に従いません。私の目標は、未処理のコミットをフィーチャーブランチに移動させておくことです。 "これは、マスターに未処理の変更がないことを前提としています。繰り返しますが、私が質問しているのは、未処理のコミットだけです。 – BrianHoltz

+0

私がやりたいことは、git-resetマンページの「コミットを元に戻してトピックブランチにする」のところに説明されています。 – BrianHoltz

+0

BrianHoltzが述べたgitのmanページは、ここにあります:http://git-scm.com/docs/git-reset/2.0.0#_examples –

3

まず、私が正しく理解していることを確認するために、状況を再確認してください。 masterでいくつかのコミットを行い、featureに移動したいので、git rebase featureを実行しましたか?まず、元に戻す。あなたがまだmasterをチェックアウトしていて、以後リベースを行っていないと仮定すると、git reset --hard ORIG_HEADを実行してリベースを元に戻します。

ここで、コミットをfeatureブランチに移動する適切な方法について説明します。

git rebase --onto feature origin/master 

としてtemp枝を動かす:今、最後はfeatureorigin/masterにコミット以降に行われたすべての変更をリベース

git checkout -b temp 

:あなたが台無しmasterをしていないので、一時的なブランチを作成し、チェックアウトfeatureから分岐した場合。今、featureに変更をマージするには:あなただけのリベース以来

git checkout feature 
git merge temp 
git branch -d temp 

それは早送りマージされます。

関連する問題