質問

私はリモート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

この質問はGithubに関するものではないことは特に知っていますが、Githubは非常に広く使用されており、これが私が探していた答えであるため、ここで共有します。

GitHubには、リポジトリのマージオプションに応じて、スカッシュマージを実行する機能があります。

スカッシュマージが有効になっている場合、「マージ」ボタンの下のドロップダウンに「スカッシュとマージ」オプションが表示されるはずです。

Screenshot of "Squash and merge" Github feature

複数のコミットで機能/task1で作業したとします。

  1. プロジェクトブランチ(Project/my_project)に移動します

    git checkout project/my_project
    
  2. 新しいブランチを作成する(feature/task1_bugfix)

    git checkout -b feature/task1_bugfix
    
  3. とのマージ --squash オプション

    git merge --squash feature/task1
    
  4. 単一のコミットを作成します

    git commit -am "add single comments"
    
  5. 枝を押してください

    git push --set-upstream origin feature/task1_bugfix
    

git用

新しい機能を作成します

ターミナル/シェル経由:

git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>

これはコミットしません。最初にレビューすることができます。

次に、この新しいブランチの機能をコミットして仕上げ、古いブランチ(作成したもの)を削除/無視します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top