2

私はgit(および一般的にバージョン管理)が初めてで、ワークフローを実装する最善の方法を見つけようとしています。私は、多くの「永続的な」ブランチ、つまり、共通のコード ベースからフォークされ、マスター ブランチにマージされることのない完全に独立したプログラムを含む (個人的な) プロジェクトに取り組んでいます。(これは、私がシミュレーション モデルに取り組んでいる科学者であり、興味深い結果が得られるかどうかを確認するためだけに多くの新しいことを試しているためです。興味深い結果が得られた場合は、現在、プロジェクト フォルダー全体をコピーして、後で戻ってきてください。代わりに、この目的のために git ブランチを使用することを目指しています。)

これらのブランチは永続的であるため、あるブランチに実装した機能を別のブランチに転送しながら、2 つのブランチ間の違いを維持する簡単な方法があるかどうかを知りたいです。たとえば、リポジトリのツリーが次のようになっているとします。

               model_a
              /
initial commit 
              \
               model_b

私の場合はmodel_amodel_b同じシミュレーション コードを広く使用して 2 つの異なるものをモデル化しています。一部のパラメータの値やシミュレーション コードの内部ループの詳細が異なる場合がありますが、それを取り巻く一般的な「インフラストラクチャ」は同じです。に取り組んでいるbranch_aときに、結果を視覚化する新しい方法を実装するとします。

               model_a --- model_a_with_visualisation_code
              /
initial commit 
              \
               model_b

私が知りたいのは、マージの競合を除いて、入力できる git コマンドが次のようになるかどうかです。

               model_a --- model_a_with_visualisation_code
              /
initial commit 
              \
               model_b --- model_b_with_visualisation_code

つまり、 に変換するために使用されたコミットだけを取得し、それらのコミットのコピーをブランチの最後に適用model_aしたいと考えています。または、少なくとも、それが私が望んでいることだと思います。model_a_with_visualisation_codemodel_b

必要なツールのように見えますgit rebaseが、理解するのに苦労しており、この使用例を説明する例が見つかりません。またgit rebase、コミットのコピーを作成するのではなく、古いバージョンのコミットを削除しているようです。

質問が明確であることを願っています。私が言ったように、私は git に不慣れで、主要な概念の多くはまだ少しぼんやりしています。たとえば、上記のツリーのラベルがタグまたはブランチを意味するのか、それとも単にコミットを意味するのかは完全にはわかりません。何かがどのように機能するかを誤解している場合は、説明をいただければ幸いです。

4

3 に答える 3

3

はい、可能です(他の回答を参照)が、間違った問題を解決しようとする可能性があると思います。

モデルを分岐させるのではなく、さまざまなモデル間で簡単に切り替えられるようにシミュレーション コードを構築し、同時に、周囲のすべてのコードと視覚化を共有するライブラリを維持することをお勧めします。

新しいモデルの構築を開始するときに分岐することはできますが、その実行に必要なモデルだけを選択できる単一のシミュレーションが最終的に得られるように、すべてのコードをマージして戻すと有利な場合があります。

そうしないと、しばらくすると、すべてが異なるバグを含むわずかに異なるブランチの大規模なセットになり、(おそらく) どれがどれであるかが本当にわからなくなります。

于 2013-05-21T09:34:44.410 に答える
2

cherry_pick is used to apply changes introduced by some existing commits. By specifying git cherry_pick [branch] you should commit the commit at the tip of the specified branch in the current branch you are in.

git checkout model_b
git cherry-pick model_a

Documentation

于 2013-05-21T09:19:39.027 に答える