読者です 読者をやめる 読者になる 読者になる

mzgkworks

iOSを中心にプログラミング関係について書く

【Git】Git入門レッスン_Chapter05_13-16

過去のコミットを打ち消す(コミットログは残る)

git revertを使い、過去のコミット内容を破棄する方法。
git reset --hard コミットIDを使うと指定したコミットIDからHEADまでのコミットがなくなってしまう。
過去の1コミットのみ内容を破棄する方法。

# 指定したコミットIDの内容を破棄する
$ git revert コミットID

viが起動し、コミットメッセージを入力を求められる。
コミットメッセージの先頭には Revert が付加されている。

コミットする

4行目にRevert理由を追記する。
viを保存終了したら、コミットされる。
追記なしで保存しないで終了しても、コミットはされるので注意。

コミットを中止する

コミットメッセージをすべて削除し保存する。
コミットは中止されても、$ git revert によってファイルはすでに修正された状態になっている。
元に戻すには、$ git reset --hard HEAD で最新のコミットに戻す。

過去のコミットを破棄する(ログ上からも削除)

git rebaseを使い、過去のコミットを破棄する。

$ git rebase -i 修正したいコミットの1つ前のコミットID
  • 修正したいコミットの1つ前を指定する
  • 実行後に起動するvim画面には、古いコミット順に並ぶ
  • vim画面で、表示されたコミットの行頭にあるコマンドを操作したいコマンドに書き換える

コマンドの意味

  • p, pick = コミットを利用
  • r, reword = コミットを利用、コミットメッセージは編集
  • e, edit = コミットを利用、修正のため処理を一時停止
  • s, squash = コミットを利用、前のコミットと合体
  • f, fixup = "squash"に似ているが、コミットメッセージは破棄
  • x, exec = シェルコマンドを実行
  • 行を削除 = コミットを削除

複数のコミットを1つにまとめる

git rebaseを使い、複数のコミットを1つにまとめる。

# コミット履歴を表示させる
$ git log --oneline
511be21 aboutメソッドを追加
6b2873d ファイル名変更
10ce6f1 showメソッドのメッセージを修正 ← これと
a8334da showメソッドのメッセージを修正 ← これをまとめる
bfda1a2 WhatIsGitにshowメソッドを追加
84cb0c0 WhatIsGitクラスを追加

# まとめる
$ git rebase -i bfda1a2(まとめるコミットの1つ前のID)

必ずまとめるコミットを含めてpickする必要がある。
上記の例では、bfda1a2を指定する。

起動したvim画面で、対象のコミットをsquashに変更して保存。

pick a8334da showメソッドのメッセージを修正
squash 10ce6f1 showメソッドのメッセージを修正
pick 6b2873d ファイル名変更
pick 511be21 aboutメソッドを追加

起動したvim画面でコメントを編集して保存。

過去のコミットを修正する

git rebaseを使い、過去のコミット内容を修正する。

# コミット履歴を表示させる
$ git log --oneline
592cc60 aboutメソッドを追加
b0c1201 ファイル名変更
cf0dac2 showメソッドのメッセージを修正 ←ここの内容を修正する
bfda1a2 WhatIsGitにshowメソッドを追加
84cb0c0 WhatIsGitクラスを追加

# 書き換える
$ git rebase -i bfda1a2

vim画面が表示されるので、対象コミットの行頭コマンドを変更して保存。

e cf0dac2 showメソッドのメッセージを修正   
pick b0c1201 ファイル名変更
pick 592cc60 aboutメソッドを追加

この後の操作

  • 処理が一時停止中。修正待ちの状態となっている
  • ファイルの内容を修正したら、git add .
  • コミットの上書きとなるので git commit --amend
  • 処理再開 git rebase --continue

git rebase後はコミットIDが変わる

git rebaseを使用すると、再コミットされて元のコミットと別物のコミットが生成される。
なので、コミットIDが変わってしまう。

ログにHEADを表示させる

$ git log --oneline --decorate
cf0dac2 (HEAD) showメソッドのメッセージを修正
bfda1a2 WhatIsGitにshowメソッドを追加
84cb0c0 WhatIsGitクラスを追加

注意

git reset git rebaseの使用が許される基準。
git pushする前(未公開)の自分が作ったコミットしかない場合のみOK


参考書

ストーリー形式でGitの使い方を学んでいけるので、1人学習がしやすい本。

アリスとボブのGit入門レッスン

アリスとボブのGit入門レッスン

Kindle

アリスとボブのGit入門レッスン

アリスとボブのGit入門レッスン