2012-01-17 13 views
1

ミスを修正する新しいコミットを行うのではなく、古いコミットなどのミスを修正する最良の方法は何ですか?私は、多くの "typo-fixing"コミットで歴史を台無しにしたくありません。私はまだコミットを誰にもプッシュしていない。gitの古いコミットで軽微なミスを変更する

このシナリオでは、他の2つのコミットを維持しながら、1月15日のコミットでコードの誤植を修正したいとしましょう。

commit 826da06f085664298164a4bfc9994cad109c59f8 
Author: Me 
Date: Tue Jan 17 18:48:12 2012 +0800 

    feature 3 working 

commit d816dd97a207add63d31958c3ffba84b65681810 
Author: Me 
Date: Tue Jan 16 17:47:29 2012 +0800 

    feature 2 working 

commit 972ded30c20692cb74ae07d0c941c43022c905bd 
Author: Me 
Date: Thu Jan 15 08:48:40 2012 +0800 

    feature 1 working 

答えて

1
rebase -i <sha of commit PRIOR to the one you want to change> 

0

私の好みの方法は、問題のあるコミットから新しいブランチを作成することです。その新しいブランチの問題を修正し、コミットしました。次に、この新しいブランチを元のブランチにマージします。これがあなたの望むものかどうかは分かりません。

その後、
1
git rebase -i HEAD~3 

は、あなたがしたいと思うものですなど、あなたが変更したいコミット(複数可)を選択し削除します。あなたは3つのコミットの作者であり、もしあなたがすでにどこかにそれを押していなければ、進んでいいと思います。それ以外の場合は、その行動を実行しないことをお勧めします。

は、私は次のシナリオを使用しthis good page for details

2

を参照してください。

  1. 次のテキスト

    pick 972ded feature 1 working 
    pick d816dd feature 2 working 
    pick 826da0 feature 3 working 
    pick xxxxxx fix feature 1 
    
    でリベース
  2. gitのコミット^ 4

このオープンのvimエディタ(おそらく)-i HEADを修正するマイナーな間違い

  • を修正

    これを

    pick 972ded feature 1 working 
    f xxxxxx fix feature 1 
    pick d816dd feature 2 working 
    pick 826da0 feature 3 working 
    
    012に変更してください

    「修正機能1」コミットを2行目に移動し、を選択してfに変更していることに注目してください。 これはgitに、 "feature 1 working"と "fix feature 1"のコミットを、最初のコミットメッセージからのコミットでマージするように指示します(つまり、 "feature 1 working")。

    "feature 2 working"と "feature 3 working"はgit leavesを "手を触れない"とします。 (実際にはこれが新しい履歴にコミットされますので、新しいIDが追加されます)

  • 関連する問題