Git4

コミットの書き換え前回の続き

コミットを抜き取る

cherry-pickは、別のブランチから今いるブランチへ、必要なコミットだけをコピーできる便利なコマンド。

$ git cherry-pick [コミットIDその1]..[コミットIDその2]

競合が発生したら、競合箇所を修正し、git addし、git commitする。
その後コミットメッセージを編集する。
コミットせずに作業ディレクトリだけに変更を留めたい場合は、オプション-nを使う。

コミットの履歴を書き換える

rebaseにiオプションを指定すると、コミットの書き換え、入れ替え、削除、統合を行うことができる。

rebaseについて分かりやすかった記事
git rebase についてまとめてみた - Qiita

コミットをまとめる

$ git rebase -i HEAD~~

まとめたいコミットの左側のpick(何もしないという意味)をsquash(もしくはs)に変更する。
squashを入れると一つ前(上)のコミットとまとめられ、1つになる。
その後コミットメッセージを編集。

コミットを修正する

$ git rebase -i HEAD~~

編集したいコミットをpickからeditにし、閉じる。
HEADがそのコミットに移るので、ファイルを開き編集。

$ git add sample.txt
$ git commit --amend

この状態だと、指定したコミットが修正されただけ。

$ git rebase --continue

でrebaseを完了させる。
コンフリクトがある時はここでエラーが出るので修正してaddrebase --continueを実行。

ブランチ上のコミットを一つにまとめてマージする

squashオプションを指定してブランチをマージすると、そのブランチのコミット全てをまとめたコミットがHEADに追加されます。

$ git merge --squash <追加したいブランチ>

これで指定したブランチの内容がHEADに追加される。
競合がある場合はファイルを編集git addし、git commitする。

感想

Vim上でZZ はファイルに変更があれば保存して終了、なければ上書きせずに終了するという方法もあると知った。
・マージとリベース色々なパターンがありすぎて難しいが、今HEADがどこにあるのか常に意識すれば理解しやすそう!