2010-12-21 15 views
15

私は、ファイルを編集しました:最後のgitの追加/コミットを元に戻すにはどうすればよいですか?

git add file.py 
git commit -m 'fixed bug' 

私はその後、別のファイルを編集し、マイナーなバグ修正を行いました。私は2つのコミットを1つずつ、「バグ修正」を表示することを望んでいません。私は、「バグ修正」でコミットしたい。

最後の追加/コミットを取り消して最初のコミットメッセージを変更するにはどうすればよいですか?

私はgit resetgit revertgit undoコマンドを見ていたが、私は推測

EDITと私のレポを台無しにしたくない:既に場合http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

答えて

26

:それを行う方法を発見あなたの2番目の変更をコミットし、それを最初にリセットします。

git reset HEAD^ 

は、今すぐあなたのHEADが最初のコミットであり、そして、あなたのローカルファイルの内容は変更されません。すべての追跡および第二のバグ修正のために含まれているファイルを変更した場合は

git add <the file(s) for the second bug fix> 
git commit --amend -m'bug fixes' 

、あなたはいつものように、代わりにこれを実行することができます。

    git commit -a --amend 
    

    をコミット改正することはまさにこれです

  • は、前回のコミットにインデックスの変更を加えます(したがって、git addまたは-aの必要性)
  • は、

最初のコミットを配布した場合、他の人のレポが奇妙になりますので注意してください。誰かが取得したコミットを変更すべきではありません。


おそらくgit merge --squashを使用することもできますが、これはより論理的ですが、必ずしも容易ではないと感じます。これを使用して、2つのコミットを含むブランチを前のコミットにマージします。

スカッシュはgit rebaseと同様に機能します。

+0

私が編集した2つのIファイルでは、すでに 'git add file; git commit'です。 'git --amend -m 'asd''を実行すると、以前のコミットメッセージを編集するだけでしょうか?ログに最初のコミットを残していますか? – dave

+0

いいえ、 '--amend'は新しく作成されたコミットにインデックスの内容を追加します。古いコミットは消える(ぶら下がる)。あなたはgitkでそれを見ることができ、消えるようにgitkでリロード(Ctrl + F5)を実行する可能性があります。ぶら下がったコミットは、後でメモリから消えてしまいます( 'git gc'はそれをきれいにすべきです)。 – Gauthier

+0

あなたはすでに2回コミットしましたか?その場合、上記のコマンドの前に 'git reset HEAD ^'を置くことができます。このすべてを実行する前にrepoをバックアップしてください(フォルダ.gitがバックアップにあることを確認してください)。データの消失には責任を負いたくありません。 – Gauthier

関連する問題