3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

細かくコミットしすぎて何の作業をしたのかがわからなくなることはありませんか?(コミットを集約,編集する,削除するgit rebase)

Last updated at Posted at 2024-06-14

1.複数コミットを1つにまとめたい(squash)

git rebaseで行う

PRを作成したブランチに移動する

リモートブランチから取得する
git checkout origin feature/1234

または

ローカルブランチ内で移動する
git switch feature/1234

リベースをする

HEAD(現在の作業位置)からnこ分のコミット履歴を表示する
git rebase -i HEAD~n

するとテキストエディタとして以下のような文字が表示される

n = 2として実行した結果
pick 0000000 commit A
pick 1111111 commit B

# Rebase 7a54171..32eea59 onto 7a54171 (2 commands)
(以下略)

まとめたいコミットをpickからsquashと書き換える.

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を戻すことができる.

HEAD(現在の作業位置)からnこ前のコミットにHEADを戻す.
git reset --soft HEAD~n

HEAD~nの部分はgit logによって出てくるコミットハッシュを指定しても良い.指定した場合,HEADから指定したコミットまでコミットをまとめることができる

これでnこ分の変更内容がgit addされた状態になる.
この後commitをする.

git commit -m "Commit message"

これでnこ分の変更内容がgit commitされた状態になった.

一個前のコミットに追加でファイルをコミットしたい際には以下のコマンドを実行する

sample.txtを追加する
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

リベースをする

HEAD(現在の作業位置)からnこ分のコミット履歴を表示する
git rebase -i HEAD~n

編集したいコミットをpickからeditと書き換える.

squashに書き換える
pick 0000000 commit A
edit 1111111 commit B

# Rebase 7a54171..32eea59 onto 7a54171 (2 commands)
(以下略)

書き換えが完了したら,Escを押し:wqを入力して保存して終了する.

これでHEADがeditと指定したコミットに移るのでコミット内容を編集する.

ファイルを追加したい

sample.txtを追加する
git add sample.txt
git commit --amend -m "Update Commit message"

ファイルを削除したい

ステージングエリアからのみ削除してワーキングエリアには残しておきたい場合

つまり後でコミットし直したい時に使う

sample.txtをステージングエリアから削除する
git rm --cached sample.txt
git commit --amend -m "Update Commit message"

ステージングエリアだけでなくワーキングエリアからも削除したい場合

sample.txtをステージングエリアとワーキングエリアから削除する
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

リベースをする

HEAD(現在の作業位置)からnこ分のコミット履歴を表示する
git rebase -i HEAD~n

するとテキストエディタとして以下のような文字が表示される

n = 2として実行した結果
pick 0000000 commit A
pick 1111111 commit B

# Rebase 7a54171..32eea59 onto 7a54171 (2 commands)
(以下略)

削除したいコミットをpickからdropと書き換える.

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
3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?