2017-04-20 7 views
0

私はマスターブランチからフィーチャーブランチを作成し、いくつかの変更を加えました。 それから、私はそれらをステージングして機能ブランチにコミットするのを忘れて、しばらくリポジトリに触れていませんでした。マスターとフィーチャーブランチをどのように扱うのですか?

最近、 私は何をしたのかを覚えていないままリポジトリに戻り、マスターブランチに切り替えました。 その時点で変更は作業ディレクトリに残っていて、私は誤って変更をマスターブランチにコミットしたと思います。私は機能ブランチに切り替えると、機能ブランチの変更を持っていない

は今、すなわち、元のmasterブランチのようなもので、マスターブランチは、すなわち機能ブランチがされているべきもののようである変化があります。 私はgit diff feature..masterでした。違いは唯一の違いです。

どうすれば修正できますか?

ありがとうございました。

+0

マスターをtmpにリネームし、機能をマスターに、tmpを機能に追加http://stackoverflow.com/questions/6591213/how-do-i-rename-a-loca L-gitのブランチ –

+0

@MarcinKrasowski私はそれがうまくいくかもしれないと思いますが、私は機能は、マスターがされている必要があります正確に何で、マスターは機能がされている必要があります正確に何であることを保証することはできません。より保守的/安全な方法がありますか? – Tim

+0

これは別の方法です。あなたは恐れることなくそれをすることができます。場合によっては、元々のように物事を得るために '' git reflog'''を持っています。 – eftshift0

答えて

1

私はこれを行うだろう: git checkout master git branch -f feature # move feature pointer to the commit it should be on git reset --hard HEAD~1 # set master one revision back, where it should be

+0

これは、誤ってマスターにコミットされた変更を本質的に破棄するため、これは半分にすぎません。 –

+0

実際にはありません。何が起こっているのは、分岐参照が_switched_であるということです。フィーチャーはマスターがどこにあるのかになり、マスターはフィーチャーが最初にあった場所になります。全ての元のコミットは実際には* feature *から目に見えます。 – eftshift0

+0

それから、 'master'にまだなかった' feature'のすべての変更が捨てられます。 –

1

を私は次の2つのことを達成したいと仮定します。

  1. が誤っmasterにコミットした変更を移動するので、彼らはfeature上にあること。
  2. リセットmasterを元の場所に戻します。

は、ここであなたがそれを行う方法は次のとおりです。

  1. masterは現在、一時的なブランチを作成します。

    $ git checkout -b temp master 
    
  2. リセットマスターバック1コミット:

    $ git checkout master 
    $ git reset --hard HEAD~1 
    
  3. コミットを

    $ git branch -d temp 
    

$ git checkout feature 
$ git merge temp 
  • は一時的なブランチを削除します。

    $ git checkout temp 
    $ git rebase --onto feature master 
    
  • 移動機能ブランチは、すべての変更が含まれるように:機能ブランチの上に一時的な枝をm個

  • 関連する問題