Open10
Gitのコミット整理方法まとめ
git commitの整理方法をまとめる
初期状態
branch切った
git branch feature/commit_work
git checkout feature/commit_work
git push -u origin feature/commit_work
ファイル登録
README.md -> main.py の順番でコミット
touch README.md
git add README.md
git commit -m "add: README"
touch main.py
git add main.py
git commit -m "add: main.py"
README.md 更新
ファイル更新する
echo "# Commit Test" > README.md
git add README.md
git commit -m "update: title"
直前のコミットを修正
含み損ねた変更を直前のコミットに入れる方法
git commit --amend
含み損ねたファイルをaddする
先程echoで入れたREADME.mdを適当に編集したファイルをaddした
git add README.md
コマンド実行
git commit --amend
コミットメッセージを修正して完了。
これで直前のコミットにgit add
したファイルが含まれた。
これ便利だな
logをワンラインで見る
git log --oneline
コミット履歴の書き換え
git rebase --interactive
今までの履歴書き換えを行える
# コミットの書き換え
reward/edit
# コミットをめとめる
squash/fixup
# コミット順序変更
インタラクティブモードでコミット順序を入れ替えるだけ
# コミット削除
drop
editにすると、当該コミットでリベース処理が一時停止するため、必要な処理をする
そしたら、add してcomit --amend
で一つのコミットにマージさせる
全部終わったらgit rebase --continue
でリベース処理を継続させる
任意のコミットに修正を追加する方法
git commit --fixup=<commit>
任意のコミットに追加修正を行うだけの場合に使用する
$ git log --oneline
5572a63 (HEAD -> feature/commit_work) add: main.py
6898d14 update: title and amend
bc85a1a add: README
4c20704 (origin/main, origin/feature/commit_work, origin/develop, origin/HEAD, main, develop) Initial commit
6898d14
に修正を入れたい場合
# 修正後
git add README.md
git commit --fixup=6898d14
# [feature/commit_work 8ba5567] fixup! update: title and amend
# 1 file changed, 3 insertions(+)
# 現時点ではコミットが増えただけ
git log --oneline
8ba5567 (HEAD -> feature/commit_work) fixup! update: title and amend
5572a63 add: main.py
6898d14 update: title and amend
bc85a1a add: README
4c20704 (origin/main, origin/feature/commit_work, origin/develop, origin/HEAD, main, develop) Initial commit
ここで変更の起点となるコミットハッシュに--autosquash
オプションを指定し、git rebase
を実行するとコミット履歴が書き換えられる
変更の起点となるコミットハッシュは追加対象コミットの一つ前のコミットである
今回の場合は6898d14
の一つ前なのでbc85a1a
git log --oneline
8ba5567 (HEAD -> feature/commit_work) fixup! update: title and amend
5572a63 add: main.py
6898d14 update: title and amend
bc85a1a add: README
4c20704 (origin/main, origin/feature/commit_work, origin/develop, origin/HEAD, main, develop) Initial commit
git rebase --autosquash bc85a1a
git log --oneline
15f92b6 (HEAD -> feature/commit_work) add: main.py
a8a765e update: title and amend
bc85a1a add: README
--autosquash 自動設定
git configに追加
git config --global rebase.autosquash true
一部だけコミットしたい場合
あるファイルの特定行だけコミットしたい場合は
git add -p
を使うと便利
git add -p
# or
git add -p <filepath>
y
でその変更をステージング、n
でステージングスキップ
e
でファイルの変更箇所を選択できるエディタモード(vi, vim)
コミットしたい箇所だけ残して、後は行削除すればOK