まずありがちな例の対処法から
単純に貴方がmainブランチから派生させた機能ブランチで作業している間に
へんてこなコミットを作成してしまったというなら
git commit --amend
やgit rebase
をうまく使いながら潰してください。
git reset
でローカルのファイルを維持したままmainブランチのタイミングまで戻っても良いでしょう。
また、自分が開発しているのに
mainブランチがどんどん積み上がって結果を受け取らなきゃいけない!
こういう時はローカルでmergeをしないで、rebaseを使って下に滑り込ませた方が良いです。
bash
1$ git branch
2* main
3
4$ git checkout -b feature/a
5$ git add [file-name]
6$ git commit -m "Aコミット"
7
8# 「mainが更新されたから受け取ってねー」
9# 一度コミットして退避
10$ git add [file-name]
11$ git commit -m "tmp"
12
13$ git checkout main
14$ git pull origin main
15$ git fetch
16
17$ git checkout feature/a
18$ git rebase master
19
20$ git log
21# "Aコミット"のIDをコピペ
22$ git reset [AコミットのID]
こんな感じで最新のmainを下に滑り込ませて、貴方のコミット常に最後に乗せる運用にすると良いです。
後は1PR1コミットを維持する場合のテクニックですが、
git commit --amend
を使いましょう。
これはgit log
で出てくる一番最後のコミットに対して混ぜ込むコマンドとして機能します。
bash
1$ git branch
2* main
3
4$ git checkout -b feature/a
5
6$ git add [適当なファイル]
7$ git commit -m "tmp"
8
9# 一旦保存しておきたい
10$ git add [ファイルパス]
11$ git commit --amend
12
13# できた!
14$ git add [ファイルパス]
15$ git commit --amend -m "ちゃんとしたコミットメッセージ"
16$ git push origin feature/a
以下は質問文の思想的な所への回答です
誤ってローカルのmainブランチで2つコミットを作成してしまい、
その後いくつかのPRを作成して開発してしまいました。
PRは1コミットではならないと誰が決めたのですか?
確かにIssue(仕事)を1コミットで終わるくらい美しい分割が出来ている事は一つの理想です。
しかしAという前提があってこそのBが出来て、AとBの合体で1Issueが解決できる場合、
コミットは2個であるほうが自然では無いでしょうか?
だからPRは複数のコミットを許容するものですし、
一度PRを出してレビューを受けた後に作り直す場合、
コミットを潰すより複数残ったままの方がレビュワーの負担面でも楽です。
ですので、どこまでいっても所詮プロジェクト内のローカルルールです。
teratailでそれを聞くなら前提としてローカルルールがこうなっているという話をすべきあって、さも当然のように聞き始めるのはおかしいです。
まず先輩・上長にブランチの運用方法を相談してください。
その影響なのか、mainブランチから開発ブランチを新規作成するたびに、
誤ってコミットしたログとgit pullしたログも、開発用ブランチに入ってしまうようになってしましました。
誰も気にしてなくね?
もし私がそんなに潔癖なブランチ運用するプロジェクトメンバーであり
質問者さんの先輩の立場だったら
なんでこんなゴミが紛れ込んでるんだ?
一回みんな作業止めてー!
rebaseで潰して履歴を綺麗にするから。
こんな風に周知してgit rebase
機能を使ってコミット履歴を一度壊して作り直すでしょう。
やってないですよね?
質問者さんが潔癖過ぎるだけです。それでも気になるなら先輩に相談してみてください。
下記はmainブランチから開発用ブランチを切って、PRを作った際のコミット履歴になります。
本来だと開発してできたコミットのみPRに含めたいです。。
何にせよmainブランチに紛れ込んでしまった後はもう変更はしないほうが良いです。
そこまで潔癖な運用してるなら、なんでそんなコミットを取り込んだんだ?バカじゃね?
レビュワー「が」責任を負うべきです。
つか、貴方達の仕事はコミット履歴を美しくすることではなく、
mainブランチをIssueが全て片付いている最新・最強・完全な状態に仕上げることなんじゃないんですか?って話
コミット履歴を過剰に綺麗にするより、キリの良いところでgit tag
機能でタグでも打ちながら運用した方が良いと思います。
その中でゴミコミットは極力減らしたいから
都度git rebase
を上手く使いながら違和感が出ないようにしたいよねという努力目標です。