2016-08-01 3 views
0

私がやろうとしていること:gitヒストリをクリーンアップする方法特定のコミットがプッシュされた後にそれらを削除しますか?

私は機能を完了しました。

git add -A; git commit -m "feature A complete" 

その後、私はいくつかのことを忘れていました。

A238ad1 feature A missed something 3 
3238adX feature A missed something 2 
1238ad7 feature A missed something 1 
111AAA2 feature A complete 

私はそれが次のようになりたい::

git add -A; git commit -m "feature A missed something 1" 
git add -A; git commit -m "feature A missed something 2" 
git add -A; git commit -m "feature A missed something 3" 

今私の歴史はこのようになりますすべてのmissed somethingコミットして

111AAA2 feature A complete 

コミットfeature A completeにマージ。

私はgit rebase -i HEAD~4が正しい方法だと知っていますが、実際に履歴を整理するために悪いコミットを取り除くわけではありません。

他の記事にはgit commit --fixupコマンドとgit rebase -i --autosquashがありますが、正しく動作するようにはなっていません。私はこれが超簡単だと確信しています、私は今日それからちょうど外です。この場合

+0

何も削除しない理由は、対話型のリベース中にこれらのコミットと何を行うべきかを指定していないためです。 'squash'でデフォルトの' pick'を変更する必要があります。このようにしてお互いの上にコミットし、最後にコミットを編集するチャンスが与えられます –

答えて

1

インタラクティブリベースに

を使用する。これは、

あなたは HEAD~5は最後の5つのコミット

を示し

git rebase -i HEAD~5 

を含めるヘッド数が続く

git rebase -i 

を使用して開始することができます

次に、さらにoコミットを1つに縮小してメッセージを編集します。ただ、代わりにpickオプション書き込みsquashの代わりに

squash

だからここにあなたが見る、私はsquashのショートカットですsためのオプションpickを変更します。このファイルを保存して閉じると、インタラクティブなリベースが開始され、私がsquashingのために指示したコミットが21b4e04 Fixed missing bad practiceに押しつぶされます。スカッシュした後、新しいコミットメッセージを入力するように求められます。新しいメッセージを入力してenterを押すと、完了です。

+0

Hmmmm。私はちょうどテストレポを作成し、これをテストし、それは機能しましたが、それは他のレポでは機能しません。これは私の他のrepoで動作していないにもかかわらず正解と思われる...:/迷惑な。 –

+0

どのように奇妙な、それはエラーメッセージまたはすべての出力を与えるか? –

+0

基本的には、私はすでにそれらを押していると思う。今私は、他の人が私の後にコミットしているので、コミットの範囲の間でコミットを縮める方法を見つけようとしています。すなわち 'git rebase -i origin/master〜5 origin/master〜2'となります。これは可能ですか? –

関連する問題