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を完了させる。
コンフリクトがある時はここでエラーが出るので修正してadd
とrebase --continue
を実行。
ブランチ上のコミットを一つにまとめてマージする
squash
オプションを指定してブランチをマージすると、そのブランチのコミット全てをまとめたコミットがHEADに追加されます。
$ git merge --squash <追加したいブランチ>
これで指定したブランチの内容がHEADに追加される。
競合がある場合はファイルを編集git add
し、git commit
する。
感想
・Vim上でZZ
はファイルに変更があれば保存して終了、なければ上書きせずに終了するという方法もあると知った。
・マージとリベース色々なパターンがありすぎて難しいが、今HEADがどこにあるのか常に意識すれば理解しやすそう!