git を使っていますが、グループで作業しているとき、履歴をきれいにしたいなーと思うことがあります。
そこで、頑張ってみます。ふー。
ローカルでcommit を一つにまとめる
とりあえず、自分は以下の作戦でできました。
- 開発開始のときのコミットに戻る
- 開発開始のコミットで新しいブランチを作り、チェックアウトする
- 開発で使用したブランチをmerge する
- リモートレポジトリにpush する or 開発で使用したブランチを削除する
実行例
最初にtopic branch dev0 で作業していました。
* 97bc41b (HEAD -> refs/heads/dev0) add3
* 0e4917a add1
* 802e1c2 initial
で、最初にチェックアウトして本命topic branch dev1 を作ります。
* 97bc41b (refs/heads/dev0) add3
* 0e4917a add1
* 802e1c2 (HEAD -> refs/heads/dev1) initial
ここでmerge --squash を実行します。
$ git merge --squash dev0
Updating 802e1c2..97bc41b
Fast-forward
Squash commit -- not updating HEAD
test.txt | 3 +++
1 file changed, 3 insertions(+)
$ git commit
[dev1 cc1152d] Squashed commit of the following:
1 file changed, 3 insertions(+)
* cc1152d (HEAD -> refs/heads/dev1) Squashed commit of the following:
| * 97bc41b (refs/heads/dev0) add3
| * 0e4917a add1
|/
* 802e1c2 initial
この状態でpush すればdev0 はremote repository にはpush されません。
また、削除するには以下のコマンドでできます。
$ git branch -D dev0
Deleted branch dev0 (was 97bc41b).
* cc1152d (HEAD -> refs/heads/dev1) Squashed commit of the following:
* 802e1c2 initial
リモート・リポジトリにあった開発ブランチの削除はgithub ではUI操作でできました。
なんだかこれで本番も乗り切れそうです。ふー。
https://www.granfairs.com/blog/cto/git-merge-squash
を参考にさせていただきました。ありがとうございました。
(2020/05/10)
追記
- 【中上級者お断り】初心者のためのgit利用入門に同じ内容がよりよく書かれていました。(2020/05/10)