0

アプリケーションの開発と保守に git を使用しています。

私のアプリケーションは 5 つのクライアントを使用しており、それぞれにロゴ、いくつかの特別な機能、構成などの独自の構成があるため、質問があります...

そして今、私は新しいコンポーネントを作成し、このコンポーネントを各クライアントインスタンスに追加する必要がありますが、適切に行う方法がわかりません.

現在、各クライアントは別々のブランチにあり、それが悪い選択であることはわかっています。

アプリケーションを更新する必要がある場合は、コードをコピーして各クライアントに貼り付け、リポジトリにプッシュする必要があります。

私はそれが非常に弱いことを知っていますが、これを適切に行うにはどうすればよいですか?

4

1 に答える 1

0

ベースを封印する前に、アプリケーションを 5 つの異なるブランチに分岐するべきではなかったでしょう。しかし、あまり離れていない場合は、次の 3 つの可能性があります。

  1. 変更を適用し、パッチを作成し ( git diff > patch)、(チェックアウトできるように) リセットして、5 つのブランチのヘッドに適用します ( git apply patch)。

  2. から新しいブランチをフォークし、masterそこに変更を適用し、git cherry-pickコミットし、各ブランチでそのコミットを行い (1 と同じ効果)、その余分なブランチを削除します。

  3. 変更を適用し、masterそのgit rebase上にブランチを適用します。これには、編集が 5 つすべてに共通の単一のコミットになるという利点があります。リベースの実践的な紹介については、こちらを参照してください。

1 と 2 は、新しいコミットの独立したコピーを 5 つのブランチの履歴の一番上に置きます。フォークする前に新しいコミットをスクイーズしようとする 3 回の試行。後者の副作用は、既存のコミットの親を変更できないため、その日付以降のすべてのコミットを新たに再構築する必要があることです。3 以降のリポジトリへのブランチごとの最初のプッシュを強制する必要があります。詳細はすべて、リンクされたドキュメントで説明されています。

更新したいものと競合するような大幅な変更を行った場合、3 つの方法はさまざまな方法で失敗することに注意してください。準備をしておくことをお勧めします。

  1. デフォルト設定では、パッチをただちに拒否し、何も変更しません。適用されなかった理由をさらに調査するか、比較的安全な方法を使用する必要があります--reject(最初にマニュアルを読んでください)。

  2. <<<<<<< ======= >>>>>>>失敗したのと同じように障害点を装飾しgit merge、競合を解決して再コミットするか、操作を中止する必要があります (使用するコマンドのアドバイスが表示されます)。

  3. 見栄えの悪い競合メッセージが作成され、途中でいくつかのコミットの更新を終了する可能性があります。繰り返しgitますが、続行する方法として役立つように努めます。

を常に持っており、git reset --hard何か問題が発生した場合に役立ちます。それらを使い慣れていない場合は、ブランチに変更を加える前に各ブランチの現在の状態のコピーを作成し ( )、すべてを元に戻すこともできます。git cherry-pick --abortgit rebase --abortgit branch backupgit reset --hard backup

于 2016-12-07T13:33:19.690 に答える