2

これに対する答えは、ドキュメントや他の質問のどこかに散らばっていると思いますが、私の状況に正確に関連するものが見つからなかったので、これを投稿します. 他の場所で関連する回答を教えてください。

wipdeploy-dev、 の3 つのブランチがありclientます。

  • wip私たちのチームの内部の作業ブランチです。これには、サードパーティのキー/シークレットと、いくつかのローカル環境構成が含まれています。

  • deploy-devも内部ですが、デプロイされたバージョンをテストするための構成が異なります。

  • clientクライアントのリモートにプッシュされるブランチです。テストに使用するサードパーティのキー/シークレットを削除します。

問題

私のwipブランチにはたくさんのコミットがあります。クライアントへの最初のリリースでは、それらを 1 つのコミットにまとめたいと思います。だから私はこれをしました:

  • git checkout -b client
  • git reset --soft <first commit>
  • git add .
  • git commit -m "v1.0 release to client"

このブランチでの最初のコミットの後、もう一度チェックアウトして v1.1 の作業を続けclientたいと思います。次に、それぞれチェックアウトしてそれらにマージwipできるはずです。deploy-devclientwip

しかし、 と をチェックアウトするclientgit merge wip、コミット履歴全体が に戻されclientます。

簡単なものが欠けていますが、全体の状況を説明せずにそれを説明する方法がわかりません。助けてくれてありがとう。

4

2 に答える 2

1

の魔法を学ぶ必要があるようですねgit rebase。たとえば、いつ git-rebase が必要になるかを参照してください。まず、git rebase と git mergeを比較します。

squash するとclient、次のようになります。

  A--B--C--D[wip]
 /
X--E--F--G[deploy-dev]
 \ 
  Z[client]

走る

git checkout wip
git rebase client

また、おそらく、

git checkout deploy-dev
git rebase client

これで、DAG は次のようになります。

  A--B--C--D
 /
X--E--F--G
 \ 
  Z[client]--E'--F'--G'[deploy-dev]
   \
    A'--B'--C'--D'[wip]

もちろん、競合を解決する必要がありますmerge

于 2013-01-18T01:59:18.840 に答える
0

これは大変な苦痛になります。もう何もマージできませclient。gitに関する限り、歴史はまったく異なります。たまたま同じリポジトリに存在し、同じファイルを生成する 2 つの無関係なプロジェクトが効果的に存在します。

リセットを調整するか、創造的な方法でリベースを使用する必要があります。リセットあり(と思います!):

git checkout wip
git reset --soft client
git add .
git commit...

git reset --softファイルを変更せずに、gitが考えているブランチを変更します。ファイルが入っているのでwip、git はあなたがclientブランチ上にいると認識し、すべてをもう一度一括コミットすることができます。

リベースを使用することもできます:

git rebase --onto client X wip

は、すでに に押しつぶされている最後Xのコミットです。これにより、すべての新しいコミットが取得され、一度に 1 つずつ再作成されます。を使用して対話モードを取得することもできます。これにより、それらをまとめたり、コミットメッセージを書き直したりできます。wipclientclient-i

リリースごとにこれを行う必要があり、間違えるとさらに奇妙な結果が得られます。理想的には、次のいずれかを行う必要があります。

  1. コミット履歴を最初から書き込んで、いつでも公開できるようにします。秘密は秘密にしておきます。ただし、これには少し遅れています。または:

  2. コミットにタグを付けてから tarball をメールで送信するなど、他のメカニズムを使用してコードをクライアントに配信します。彼らが差分を追跡したい場合は、あなたが で差分を生成するかgit diff v1.0..v1.1、自分でそれを行うことができます。

于 2013-01-18T02:01:09.207 に答える