箱のプログラミング日記。

渋谷の自社開発企業でRails書いてます。

コミットのやり直し

f:id:y_hakoiri:20191102121618j:plain

 

gitのCUI操作にもだいぶ慣れてきました。

 

今回は、基本的なpush,pull,mergeは理解している方がさらに使えると便利な

コミットの修正についてまとめていこうと思います。

 

コミットを修正したい時・・・amend

コミットメッセージを変えたい

私もよくあるんですが、タイポで勢い余ってそのままコミットしちゃった時。

コミットメッセージを変えることができます

git commit --amend -m "新しいコミットメッセージ"

コミットに修正を加えたい

一度コミットした後に、

あ!このファイルもこのコミットに入れたかったんだった。。。

ってことよくありますよね。

そういう時もamendを使います。

 

まずは対象のファイルをadd

(既にコミット済みの同ファイルに編集を加えた場合ももちろんOK)

git add ファイル名

 

さっきのコミットに追加

git commit --amend

このコマンドを打つとvimが開かれるので

iを押してインサートモードにし、

コミットメッセージも合わせて変えたい場合は修正してください。

その後esc→:wqで修正を保存できます。

(詳しくはvimの使用法を参照)

 

これでローカルのコミットはきちんと更新されました。

もし、既にリモートにプッシュしてしまっている場合は

この更新されたコミットをリモートにもプッシュしなきゃいけません。

 

でも、この場合差分があると怒られてしまってエラーになるので

強制プッシュします。

 

強制プッシュは本来あまりやるべきではない行為っぽいので

複数人での開発の時は注意して行ってください。

自分が作った(作業中の)リモートブランチならまだしも、

masterなどのみんなが使用するブランチへの強制プッシュは絶対にやめましょう。

git push -f origin ブランチ名

 

※御察しの通り、

コミットメッセージだけ変えたい場合も

何もaddせずgit commit amendをするとvimが立ち上がるので

そこでコミットメッセージを変えられますが、

 

むやみやたらにvimを開いて変なことをしないほうが良さげなので、

コミットメッセージのみ変えたい場合はgit commit --amend -m "メッセージ"で

オプションをつけてワンラインで済ませたほうが無難です。

 

コミットをやり直したい時・・・reset

後からファイルを追加したり、コミットメッセージを修正したり

そういう次元ではなくて、コミットしたことが間違いだった!

取り消したい!!という場合はresetします。

 

基本はこちら

git reset

これにオプションつけます。

 

ローカルのワーキングツリーの変更を残したまま

コミットしたことだけをリセットしたい場合は

git reset --soft 対象のコミット

 

ローカルのワーキングツリーの変更もいらない!

コミットごとごっそりローカルもなかったことにしたい!

という場合はこちら

git reset --hard 対象のコミット

 

オプションがsoftかhardかで

自分が作業しているローカルのワーキングツリーに内容が残るかどうかが変わってきます。

 

「対象のコミット」部分は

git logで出てくるコミットIDの先頭何桁かを入れても良いですし、

直前のコミットならHEAD^

2つ前のコミットならHEAD^^など

表現方法はいくつかあります。

 

間違えて違ったコミットに対して処理をしてしまわないよう、

自分が消したいコミットをよく確認してから操作することをお勧めします。

 

参考

www-creators.com