2017-08-24 7 views
1

これは(まあ、多分頻繁に)たまには私に何が起こる:gitの変更せずにコミット中間変更後の1

:私がプッシュする前に、次のすべてが発生します。

私のソフトウェアプロジェクトは、新しい機能を必要とします。 動作するまでコード化してテストします。 私は新しい機能のための部屋を作るために持っていたので、私はgit add -iを使用して、2つのコミットに変更を分ける:

A --- R --- F 

Rは、リファクタリングの変更が導入されてコミット、Fは、新機能のコードを追加します。

私は変更を分けて間違っていることに気づいたので、Fにあるものはすでに実際にRに属しています。その逆もあります。 だから、基本的には、Rを台無しにされ、(Fの最終状態が完全であるのに対し)のテストに合格していません。

それを修正するには、私は一時的な枝にRをチェックアウトし、すべてのものを修正します。 I git commit --amend、今私は

A --- R --- F 
    \ 
    \-- R' 

だから今欠けていることすべてが新しいブランチにFを移動されています。 はこれまでのところ、私の解決策は、(私は実際にブランチ名を使用しますが、あなたは私が何を意味するかを参照)git rebase --onto R-prime R Fを行うことでした。 それに伴う問題は、それは私が欲しいものを正確ではないということです:gitは私がFと異なる場合がありますF'をコミット与え、私はR'FR間とを変更する移動したい理解しています。 はしかし、私はF'は、その祖先を除き、Fと全く同じようにしたいです。 多くの場合、rebaseは、修正が難しい(エラーが発生しやすい)競合を引き起こします。

私はスナップショットFではなく、差分RFを移動したいgitを伝える方法はありますか?あなたの現在のHEADがR'であり、それは(代わりにFR'の代替ハッシュ)のようにする必要がありますと仮定すると、

答えて

1

git reset --hard F 
git reset --soft R' 
git commit -c F 

それはあるようFから木を取り、R'の子としてそれをコミットし、代わりに...それはあなたが、私は何が起こっているかを理解し、それは私が真夜中に寝る前にやるだろう何かではありません

+0

それを変更したいFからのメッセージをコミットし、エディタを起動とにかく感謝! – user189

関連する問題