私はリモートGitサーバーを持っています、これが私が実行したいシナリオです:
それぞれのバグ/機能ごとに異なるGitブランチを作成します
私はそのGitブランチのコードを非公式のGitメッセージでコミットし続けます
トップリポジトリでは、公式のGitメッセージを使って1つのバグに対して1つのコミットをしなければなりません
それでは、どのようにして私のブランチをリモートブランチにマージして、すべてのチェックインに対して1つのコミットしか得られないようにすることができます(私はこのためのコミットメッセージも提供したいです)。
あなたのバグ修正ブランチがbugfix
と呼ばれていて、それをmaster
にマージしたいとします。
git checkout master
git merge --squash bugfix
git commit
これはbugfix
ブランチからすべてのコミットを取り出し、それらを1つのコミットにまとめ、それをあなたのmaster
ブランチとマージします。
説明 :
git checkout master
あなたのmaster
ブランチに切り替えます。
git merge --squash bugfix
bugfix
ブランチからすべてのコミットを受け取り、それをあなたの現在のブランチとマージします。
git commit
マージされた変更から単一のコミットを作成します。
-m
パラメータを省略すると、コミットを確定する前に、圧縮されたコミットからのすべてのメッセージを含むコミットメッセージのドラフトを変更できます。
私のために最後にこれを片付けたのは コメント であることを示していました:
git checkout main
git merge --squash feature
することと同等です:
git checkout feature
git diff main > feature.patch
git checkout main
patch -p1 < feature.patch
git add .
機能ブランチを105個のコミット(!!)でマージして、それらすべてを1つにまとめるときは、 each の中間のコミットについてマージの競合を個別に解決する必要があるため、git rebase -i Origin/master
はしたくありません(あるいは少なくともgitが自分自身を理解することができないもの)。 git merge --squash
を使用すると、機能ブランチ全体をマージするための1回のコミットで、必要な結果が得られます。そして、私はせいぜい1つの手動紛争解決をするだけでよいです。
あなたはスカッシュオプションとマージしたいです。それはあなたが一度にそれを一つのブランチにしたいのであればです。
git merge --squash feature1
単一のコミットと同時にすべてのブランチをマージしたい場合は、まず対話的にリベースし、各機能を縮小してからタコをマージします。
git checkout feature1
git rebase -i master
1つのコミットにまとめてから、他の機能についても繰り返します。
git checkout master
git merge feature1 feature2 feature3 ...
この最後のマージは一度に多数のブランチをマージするため、「タコのマージ」です。
お役に立てれば
main
にすでにgit merge bugfix
がある場合、マージコミットを次のようにして1つにまとめることができます。
git reset --soft HEAD^1
git commit
カスタムコミットでnewFeature
ブランチをmaster
にマージします。
git merge --squash newFeature && git commit -m 'Your custom commit message';
もしそうなら、あなたは
git merge --squash newFeature && git commit
あなたはカスタマイズ可能な全てのnewFeature
ブランチコミットを含むコミットメッセージを受け取るでしょう。
Feature/task1で複数のコミットを行ったとします。
あなたのプロジェクトブランチ(project/my_project)に行ってください。
git checkout project/my_project
新しいブランチを作成する(feature/task1_bugfix)
git checkout -b feature/task1_bugfix
--squash
オプションでマージする
git merge --squash feature/task1
単一のコミットを作成する
git commit -am "add single comments"
あなたの枝を押す
git Push --set-upstream Origin feature/task1_bugfix
Gitの場合
新しい機能を作成する
ターミナル/シェル経由:
git checkout Origin/feature/<featurename>
git merge --squash Origin/feature/<featurename>
これはコミットしません、あなたが最初にそれをレビューすることを可能にします。
それからコミットして、この新しいブランチから機能を終了し、古いもの(あなたが開発したもの)を削除/無視します。