コミットの書き換え(操作)

 stepup-tutorial/tutorial1ディレクトリに移動

このリポジトリの履歴は次の図で表す状態

f:id:mkyosuke:20191225173327p:plain

 

logコマンドで履歴を確認

f:id:mkyosuke:20191225175356p:plain



 

sample.txtを開いて、編集。

commit 4を追加

f:id:mkyosuke:20191225173710p:plain

--amendオプションを追加してコミット

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

直前のコミットのコミットメッセージがエディタで表示。

「4の追加」に変更して保存・終了をする

f:id:mkyosuke:20191225175437p:plain



結果

f:id:mkyosuke:20191225174340p:plain
 

revert

 revertを使って「pullの説明に追加」を打ち消す。

stepup-tutorial/tutorial2ディレクトリに移動します。このリポジトリの履歴は次の図で表す状態

f:id:mkyosuke:20191225175132p:plain

 

f:id:mkyosuke:20191225175623p:plain

revertを使って、「4の追加」をしているコミットを取り消す。

$ git revert HEAD

 

f:id:mkyosuke:20191225175935p:plain

sample.txtを開いて、4の説明がなくなっていれば成功

f:id:mkyosuke:20191225180121p:plain

f:id:mkyosuke:20191225180405p:plain

reset

 resetを使ってmastertブランチの先頭から二つ分のコミットを削除しする。

stepup-tutorial/tutorial3ディレクトリに移動します。このリポジトリの履歴は次の図で表す状態

f:id:mkyosuke:20191225175132p:plain

logコマンドで履歴を確認

f:id:mkyosuke:20191225180944p:plain

resetを使って、コミット削除

 

$ git reset --hard HEAD~~

f:id:mkyosuke:20191225181329p:plain

sample.txtを開いて、3と4の説明がなくなっているかどうか確認。logコマンドで履歴を確認。

f:id:mkyosuke:20191225181656p:plain

f:id:mkyosuke:20191225181455p:plain

結果

f:id:mkyosuke:20191225181807p:plain

 

cherry-pick

 stepup-tutorial/tutorial4ディレクトリに移動します。このリポジトリの履歴は次の図で表す状態になっています。
ここでは、別のブランチで行った「3の追加」という変更だけをmasterブランチに取り込みます。

 

f:id:mkyosuke:20191225183547p:plain

masterブランチに移動した後、cherry-pickを使って、「3を追加」したコミットを取り出してmasterに。(ドキュメント内のコミット"4d924f"でダウンロードしてきたリポジトリ内でgit logを実行し、適切なコミットを確認して使用)

f:id:mkyosuke:20191225184517p:plain

 

競合が発生しました。sample.txtを開いて競合箇所を修正してから、コミット

f:id:mkyosuke:20191225184414p:plain

f:id:mkyosuke:20191225184715p:plain



rebase -i でコミットをまとめる

 

stepup-tutorial/tutorial5ディレクトリに移動。このリポジトリの履歴は次の図で表す状態。

f:id:mkyosuke:20191226105849p:plain

ここでは、「3の追加」と「4の追加」という変更を、ひとつのコミットにまとめる。

 過去のコミットをまとめるには、rebase -iを使用

$ git rebase -i HEAD~~

二行目のpickの文字をsquashに変更して保存・終了。
すると、まとめた後のコミットに設定するコミットメッセージを編集するためのエディタが表示されるので、編集して保存・終了。

これで、二つのコミットが一つのコミットにまとめられた。logコマンドで履歴を確認。

f:id:mkyosuke:20191226113948p:plain

f:id:mkyosuke:20191226114140p:plain





rebase -iでコミットを修正する

 stepup-tutorial6ディレクトリに移動。このリポジトリの履歴

f:id:mkyosuke:20191226105849p:plain

rebase -iを使って、まずは修正するコミットを選択

$ git rebase -i HEAD~~

テキストエディタが開いて、HEADからHEAD~~までのコミットが次のように表示。

f:id:mkyosuke:20191226120200p:plain

一行目のpickの文字をeditに変更して保存・終了。

すると、次のような出力が表示されて、修正するコミットがチェックアウトされた状態になる。

f:id:mkyosuke:20191226120510p:plain


sample.txtを開いて、commitの説明のところを適当に変更。

f:id:mkyosuke:20191226120947p:plain

commit --amendで変更を保存します。

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

commitをしただけだとまだrebaseの作業は終わっていないので、このコミットでの作業が終了したことを知らせるには、 --continueオプションを指定してrebaseを実行。

$ git rebase --continue


merge --squash

stepup-tutorial/tutorial7ディレクトリに移動。このリポジトリの履歴

ここでは、abcブランチの全てのコミットを、一つのコミットとしてまとめてmasterブランチに取り込む

f:id:mkyosuke:20191225183547p:plain

masterブランチに移動した後、--squashオプションを指定してmergeを実行。

f:id:mkyosuke:20191226123214p:plain

競合が発生。sample.txtを開き競合が箇所を修正してコミット。

f:id:mkyosuke:20191226123449p:plain

$ git add sample.txt
$ git commit

これで、abcブランチ上の全てのコミットを一つにまとめたものが、masterブランチに追加される。