2016-09-02 21 views
1

コミットをいくつか一緒に「スカッシュ」する必要があります。Git、スカッシュリベースを「強制」する方法

git rebase -i HEAD~10

しかし、今、私は下のエラーを取得しています:あなたは私がすべての競合を解決gitふりを見ることができるように

error: could not apply 2009972... fixes

When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort".

通常、私はこのような何かを行うために使用しています。さて、私はを望んでいません。は紛争を解決できません。

gitのようなものを伝える方法があります。「ねえ、私は何もマージしたくないです。このブランチのすべての追跡済みファイルを取ります。最後のコミット/ HEADに表示されるので、破棄/削除してください。最新の、そして最後に「新しいコミットとしてこれらのファイルを「適用」する前に、前回の10回のコミット:

たとえばが、これは全てのリストであると仮定すると、ハッシュをコミット:

1-2-3-4-5-6-7-8-9-10-11-12、どこHEADポイント12へ

私はこの操作が2からすべてのコミットと呼ばれるものをスカッシュ/削除したいと思います。 git log後の最終的な結果が与えるよう-11、含ま:前と操作後ファイルが同じでなければなりません

1-12

私は必要なものを得るためのコマンドは何ですか?

答えて

2

(現在のリベースを中止した後)、最も簡単な解決策がある:今すぐ

$ git reset --soft HEAD~10 

、あなたの頭が戻って10回のコミットを移動したが、あなたのファイルはいずれも変更されません:彼らはすべての新しい変更として表示されますコミットします。

次に、通常どおりにコミットしてください。


このアプローチの欠点は、新しいコミットメッセージを書き込むときに中間コミットメッセージにアクセスできなくなることです。

$ git rebase -i -s theirs HEAD~10 

それは興味深いものになるだろうが、あなたが最初に衝突を得ることができた方法を知っている:

代替競合解消戦略彼らを指定することによってによってあなたのためのオリジナルrebase -iコマンドを動作させるためにありますただし、通常rebase -iはきれいに適用する必要があります。これらの10件のコミットの一部がマージされていない場合は、

+0

おかげさまで、私は--softについて忘れましたが、2番目の解決策に興味があります。彼らの正確なことと、あなたが「あなたのために働く」という意味を説明できますか? – Martin

+0

はいそれらのコミットのいくつかはマージされています – Martin

+0

戦略の説明については、マージ&リベース文書を参照してください:rebase -iは、パッチを順番に1つずつ再生し、 '-s theirs'は、新しいstate_を取る(すなわち、コミットrebaseが現在再生中である)。 – Useless

関連する問題