1. ホーム
  2. git

[解決済み] プッシュ前に複数のコミットを1つにまとめる

2022-05-02 15:58:59

質問

この質問は、この作業をどのように行うかだけでなく、そうすることがGitの良い習慣なのか悪い習慣なのかに関わるものです。

ローカルではほとんどの作業をmasterブランチで行いますが、"topical_xFeature"と呼ぶトピカルブランチを作成したとします。topical_xFeature" で作業をしている間に、master ブランチで別の作業をするために行ったり来たりしているうちに、"topic_xFeature" ブランチで複数回のコミットをしたことが判明しました。

最初 これはバッドプラクティスだと思われますか?1回のプッシュで1ブランチ1コミットにしておいたほうが賢明ではないでしょうか? プッシュする前にブランチ上で複数のコミットをすることが良いのはどんな場合でしょうか?

2つ目 topical_xFeature ブランチの複数のコミットを master ブランチに取り込んでプッシュするにはどうすればよいでしょうか? 気にせず複数のコミットがプッシュされるようにすればいいのか、それとも何らかの方法でコミットをひとつにまとめてからプッシュしたほうが迷惑がかからないのか? また、どのようにすればいいのでしょうか?

どのように解決するのですか?

最初の質問ですが、複数のコミットを一度にプッシュすることは何も問題ありません。多くの場合、作業をいくつかの小さな論理的なコミットに分割し、一連の作業が完了したと感じた時点で初めてそれらをプッシュすることができます。あるいは、接続が切れている間にローカルでいくつかのコミットを行い、再び接続したときにそれらをすべてプッシュすることもあるでしょう。一回のプッシュでひとつのコミットに制限する必要はありません。

私は一般的に、各コミットを、動作に必要なすべてを含む、単一の論理的で首尾一貫した変更にしておくのが良いアイデアだと思います(そうすれば、コードが壊れた状態のまま放置されることはありません)。もし二つのコミットがあり、最初のコミットだけを適用するとコードが壊れてしまう場合、二番目のコミットを最初のコミットに統合するのは良い考えかもしれません。しかし、二つのコミットがあり、それぞれが合理的な変更を加えている場合は、別々のコミットとしてプッシュしても問題ありません。

もし、複数のコミットをまとめて潰したい場合は git rebase -i . ブランチにいる場合 topical_xFeature を実行します。 git rebase -i master . この操作でエディタウィンドウが開かれ、多くのコミットが pick . 最初以外を squash そうすると、これらの変更をすべて保持したまま最初のコミットにまとめるように Git に指示します。そうしたら master を作成し、機能ブランチにマージしてください。

git checkout topical_xFeature
git rebase -i master
git checkout master
git merge topical_xFeature

また、もしすべてを topical_xFeaturemaster を使えば、次のようにすればいいのです。

git checkout master
git merge --squash topical_xFeature
git commit

どれを選ぶかはあなた次第です。一般的には、複数の小さなコミットがあっても気にしませんが、時には余計なマイナーコミットをするのが面倒なので、ひとつにまとめてしまうこともあるでしょう。