1.複数コミットを1つにまとめたい(squash)
git rebaseで行う
PRを作成したブランチに移動する
git checkout origin feature/1234
または
git switch feature/1234
リベースをする
git rebase -i HEAD~n
するとテキストエディタとして以下のような文字が表示される
pick 0000000 commit A
pick 1111111 commit B
# Rebase 7a54171..32eea59 onto 7a54171 (2 commands)
(以下略)
まとめたいコミットをpick
からsquash
と書き換える.
pick 0000000 commit A
squash 1111111 commit B
# Rebase 7a54171..32eea59 onto 7a54171 (2 commands)
(以下略)
修正が完了したら,Esc
を押し:wq
を入力して保存して終了する.
その後,再度テキストエディタが開くので,
# This is a combination of 2 commits.
# This is the 1st commit message:
commit A comment
# This is the commit message #2:
commit B comment
(以下略)
まとめ先のコミットや消すコミットのメッセージを修正できる
# This is a combination of 2 commits.
# This is the 1st commit message:
commit A and B comment
# This is the commit message #2:
# commit B はいらないのでメッセージごと削除すれば良い
(以下略)
修正が完了したら,Esc
を押し:wq
を入力して保存して終了する.
まとめた際に,まとめる元のコミットは履歴に残らず,まとめる先のコミットのみ残るので注意
その後,リモートにフォースプッシュする.
git push -f origin feature/1234
git reset --softで行う
最新のコミットから見て直前のコミットを一気にまとめる際に有効.
PRを作成したブランチに移動する
git checkout origin feature/1234
または
git switch feature/1234
リセットをする.
これはワーキングエリアやステージングエリアの内容を保持したままHEADを戻すことができる.
git reset --soft HEAD~n
HEAD~n
の部分はgit log
によって出てくるコミットハッシュを指定しても良い.指定した場合,HEADから指定したコミットまでコミットをまとめることができる
これでnこ分の変更内容がgit add
された状態になる.
この後commitをする.
git commit -m "Commit message"
これでnこ分の変更内容がgit commit
された状態になった.
一個前のコミットに追加でファイルをコミットしたい際には以下のコマンドを実行する
git add sample.txt
git commit --amend -m "Update Commit message"
git commit --amend -m "Update Commit message"
のみ実行すればコメントのみ変更できる
その後,リモートにフォースプッシュする.
git push -f origin feature/1234
その他のresetコマンドについてはこの記事で
コミットを編集したい
PRを作成したブランチに移動する
git checkout origin feature/1234
または
git switch feature/1234
リベースをする
git rebase -i HEAD~n
編集したいコミットをpick
からedit
と書き換える.
pick 0000000 commit A
edit 1111111 commit B
# Rebase 7a54171..32eea59 onto 7a54171 (2 commands)
(以下略)
書き換えが完了したら,Esc
を押し:wq
を入力して保存して終了する.
これでHEADがeditと指定したコミットに移るのでコミット内容を編集する.
ファイルを追加したい
git add sample.txt
git commit --amend -m "Update Commit message"
ファイルを削除したい
ステージングエリアからのみ削除してワーキングエリアには残しておきたい場合
つまり後でコミットし直したい時に使う
git rm --cached sample.txt
git commit --amend -m "Update Commit message"
ステージングエリアだけでなくワーキングエリアからも削除したい場合
git rm sample.txt
git commit --amend -m "Update Commit message"
コミットメッセージを変更したい
git commit --amend
のみ実行する
git commit --amend -m "Update Commit message"
編集が終了したら次のedit
を指定したコミットまで移動させるために下記のコマンドを実行する.移動したら上記のコミット編集操作を行い下記のコマンドを実行する動作を繰り返す.
もし1つだけedit
にしていたらリベースが終了するので以下のコマンドを実行した後に次のフォースプッシュをすること
git rebase --continue
最後にリモートへフォースプッシュする.
git push -f origin feature/1234
コミットの削除をしたい
コミットを削除することで,エラーが発生したり,コミット履歴が壊れたりする可能性がある.特に,削除されたコミットに依存する他のコミットがある場合,コンフリクトが発生したり,変更差分が正しく追跡できなくなったりすることがあるので注意.
PRを作成したブランチに移動する
git checkout origin feature/1234
または
git switch feature/1234
リベースをする
git rebase -i HEAD~n
するとテキストエディタとして以下のような文字が表示される
pick 0000000 commit A
pick 1111111 commit B
# Rebase 7a54171..32eea59 onto 7a54171 (2 commands)
(以下略)
削除したいコミットをpick
からdrop
と書き換える.
pick 0000000 commit A
drop 1111111 commit B
# Rebase 7a54171..32eea59 onto 7a54171 (2 commands)
(以下略)
修正が完了したら,Esc
を押し:wq
を入力して保存して終了する.
その後,再度テキストエディタが開くので,
# This is a combination of 2 commits.
# This is the 1st commit message:
commit A comment
# This is the commit message #2:
commit B comment
(以下略)
消すコミットのメッセージを修正できるがコミットを削除するのでコメントは消してしまってよい
# This is a combination of 2 commits.
# This is the 1st commit message:
commit A and B comment
# This is the commit message #2:
# commit B はいらないのでメッセージごと削除すれば良い
(以下略)
修正が完了したら,Esc
を押し:wq
を入力して保存して終了する.
コンフリクトを直してadd commitをする
git add <file>
git commit -m "コメント"
必要に応じてリベースを継続する
git rebase --continue
その後,リモートにフォースプッシュする.
git push -f origin feature/1234