2016-12-01 13 views
2

私はgitを使いこなしたことがありません。過去のgitコミットを元に戻してから変更を続けてください

問題の良い解決策ではないと判断した一連の特定のコミット(単一のファイルに関する)を元に戻したいのですが、それ以来導入されている他のすべてのコミットを保持したいと思います。

ここで元に戻すと感じるように、コードを削除するためにファイルを編集したくない場合は、より明示的であり、より良い意向を示します。

それはこのようなものになる:

X - >Y - > X - > -X - >Y - > X - > X

Yをその特定の機能に関連するコミットを指し、Xはすべてそのまま維持したいコミットであり、次のようになります。

X - > X - > -X - > X - > X

私はちょうど以降特定のポイントからすべてのコミットを含めたくないので、リベースはここで働いてしまうかどうかはわかりません。

cherry-pickはより良いアプローチですか?

EDIT:おそらく、すべてのコミットがプッシュされることに言及する価値があります。

ここで説明したようにあなたが git rebase --ontoを使用することができます
+1

WQはリベースと単にからコミット問題を取り除きますピックリスト。 –

答えて

1

:あなたの特定のケースでhttps://blog.pivotal.io/labs/labs/git-rebase-onto

X1 -> Y1 -> X2 -> X3 -> Y2 -> X4 -> X5 

をコマンドは次のようになります。

git rebase --onto X3 Y2 # strips Y2 
git rebase --onto X1 Y1 # strips Y1 
+0

これを確認するには、これは時系列の逆順で行う必要がありますか?最新から初めまで? – Nobilis

+0

@Nobilis:これはどちらの順番でもかまいませんが、以前の履歴を編集すると後のハッシュが変更される可能性があるので、この方法を選択しました。プロセスの開始時にハッシュを書き留めてからチェックしなくても使用できるからですそれらを再び。もしあなたがそれを行うなら、それ以外の方法では何もひどいことをしてはいけませんが、失敗するかもしれないと思うので、各ステップの前に再びハッシュを調べなければなりません。 –

+0

ヒントをありがとう、私はrebaseを検討する - 私は将来認識していないが、それらのコミットをプッシュしたことは、書き換えの歴史は私たちの場合にはお勧めの選択肢ではないようです。私は '復帰'パスを下る必要があります。 – Nobilis

0

あなたは以前に特定のファイルを元に戻すことができますコミット:

git reset <commit hash> <filename>

最初のファイルに加えられた変更を確認するためには良いかもしれません:

git diff <commit hash> <file name>

あなたはgit logでハッシュをコミット得ることができます。

代わりに、あなただけのバージョン管理からファイルの以前のバージョンをチェックアウトすることができます

git checkout -- <file name>

編集:詳細情報here

0

私個人的には私はgit rebase -i HEAD〜10(最後の10個のコミットの対話的なrebase)を好みます。ここでは、その行をコメントするだけで悪いコミットを削除します。

これにはpush -forceが必要であることに注意してください。これは常に非常に注意が必要です。

2

あなたのコミットはまだに共有されていない場合は、あなたの過ちを修正するために、インタラクティブリベースを使用することができます(まだあなたのリポジトリ内のローカルコミットしている)

syntaxeです:Gitは--interactiveはのコミットリベース

あなたの場合、最初のxコミットのハッシュはx1(このコミットのハッシュコードをgitするためにgit logを使用します)とすると、git rebaseを使用することができます(git rebase -iコミットのハッシュ) -i x1

それぞれについて、

あなたが次に(ESCキーを使用して)編集モードを終了し、ドロップ

を選ぶを置き換える削除するコミット:インタラクティブ

関連する問題