gitマージ - スカッシュの使用方法?
-
24-10-2019 - |
質問
私はリモート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つに押しつぶしたいとき、私はしたくありません 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 ...
その最後のマージは、一度に多くの枝を融合しているため、「タコマージ」です。
お役に立てれば
あなたがすでに持っているなら git merge bugfix
の上 main
, 、あなたはあなたのマージのコミットを次のものに押しつぶすことができます:
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
ブランチコミット、カスタマイズできます。
ここで徹底的に説明します: https://youtu.be/fqnaiacelt4
複数のコミットで機能/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>
これはコミットしません。最初にレビューすることができます。
次に、この新しいブランチの機能をコミットして仕上げ、古いブランチ(作成したもの)を削除/無視します。