コミットの書き換え(操作)
stepup-tutorial/tutorial1ディレクトリに移動
このリポジトリの履歴は次の図で表す状態
logコマンドで履歴を確認
sample.txtを開いて、編集。
commit 4を追加
--amendオプションを追加してコミット
$ git add sample.txt
$ git commit --amend
直前のコミットのコミットメッセージがエディタで表示。
「4の追加」に変更して保存・終了をする
結果
revert
revertを使って「pullの説明に追加」を打ち消す。
stepup-tutorial/tutorial2ディレクトリに移動します。このリポジトリの履歴は次の図で表す状態
revertを使って、「4の追加」をしているコミットを取り消す。
$ git revert HEAD
sample.txtを開いて、4の説明がなくなっていれば成功
reset
resetを使ってmastertブランチの先頭から二つ分のコミットを削除しする。
stepup-tutorial/tutorial3ディレクトリに移動します。このリポジトリの履歴は次の図で表す状態
logコマンドで履歴を確認
resetを使って、コミット削除
$ git reset --hard HEAD~~
sample.txtを開いて、3と4の説明がなくなっているかどうか確認。logコマンドで履歴を確認。
結果
cherry-pick
stepup-tutorial/tutorial4ディレクトリに移動します。このリポジトリの履歴は次の図で表す状態になっています。
ここでは、別のブランチで行った「3の追加」という変更だけをmasterブランチに取り込みます。
masterブランチに移動した後、cherry-pickを使って、「3を追加」したコミットを取り出してmasterに。(ドキュメント内のコミット"4d924f"でダウンロードしてきたリポジトリ内でgit logを実行し、適切なコミットを確認して使用)
競合が発生しました。sample.txtを開いて競合箇所を修正してから、コミット
rebase -i でコミットをまとめる
stepup-tutorial/tutorial5ディレクトリに移動。このリポジトリの履歴は次の図で表す状態。
ここでは、「3の追加」と「4の追加」という変更を、ひとつのコミットにまとめる。
過去のコミットをまとめるには、rebase -iを使用
$ git rebase -i HEAD~~
二行目のpickの文字をsquashに変更して保存・終了。
すると、まとめた後のコミットに設定するコミットメッセージを編集するためのエディタが表示されるので、編集して保存・終了。
これで、二つのコミットが一つのコミットにまとめられた。logコマンドで履歴を確認。
rebase -iでコミットを修正する
stepup-tutorial6ディレクトリに移動。このリポジトリの履歴
rebase -iを使って、まずは修正するコミットを選択
$ git rebase -i HEAD~~
テキストエディタが開いて、HEADからHEAD~~までのコミットが次のように表示。
一行目のpickの文字をeditに変更して保存・終了。
すると、次のような出力が表示されて、修正するコミットがチェックアウトされた状態になる。
sample.txtを開いて、commitの説明のところを適当に変更。
commit --amendで変更を保存します。
$ git add sample.txt
$ git commit --amend
commitをしただけだとまだrebaseの作業は終わっていないので、このコミットでの作業が終了したことを知らせるには、 --continueオプションを指定してrebaseを実行。
$ git rebase --continue
merge --squash
stepup-tutorial/tutorial7ディレクトリに移動。このリポジトリの履歴
ここでは、abcブランチの全てのコミットを、一つのコミットとしてまとめてmasterブランチに取り込む
masterブランチに移動した後、--squashオプションを指定してmergeを実行。
競合が発生。sample.txtを開き競合が箇所を修正してコミット。
$ git add sample.txt
$ git commit
これで、abcブランチ上の全てのコミットを一つにまとめたものが、masterブランチに追加される。