2

Git で次のことを実行しましたが、それが正しい方法であるかどうかはわかりません。私が持っているのは、いくつかのものを含むファイルです。次に、このファイルに余分なものを追加するブランチがあります (それを拡張します。別売りのプラグインです)。branch1 と branch2 に次の内容のファイルがあるとします。

-----------
branch1
-----------
123

-----------
branch2
-----------
123
qwe
-----------

次に、branch1 の主要な機能について作業を行い、そのブランチにコミットしました。その後、branch1 を branch2 にマージして、この新しい機能をファイルのプラグイン バージョンにも再適用しました。今、ファイルは

-----------
branch1
-----------
1234

-----------
branch2
-----------
1234
qwe
-----------

しかし、コードは完全には機能しないため、branch2 に切り替えて、そこでファイルを拡張するコードに変更を加える必要があります (「qwe」を「qwer」に変更します)。ただし、作業中にベースコード (「1234」) にいくつかの間違いが見つかり、それらを修正します (「1234」を「12345」に変更します)。HEADがbranch2にある私の作業ディレクトリには次のものがあります

-----------
branch2 (working directory)
-----------
12345
qwer
-----------

今、私はこれをコミットする必要があります。私が目指している結果は

-----------
branch1
-----------
12345

-----------
branch2
-----------
12345
qwer
-----------

これを単に branch2 にコミットしてから、1234->12345 の変更を個別に branch1 に再適用し、それもコミットすると、探している結果が得られるのではないかと心配していますが、Git はこれを 2 つの別個の完全に独立したコミットとして認識し、将来、同様のプロセスを経るとき (たとえば、branch1 で 12345->123456 を実行し、次に branch1->branch2 をマージする場合)、その場所で競合が発生します。したがって、私の解決策は、インタラクティブなステージングを使用して、qwe->qwer の変更のみを branch2 にコミットすることです。次に、残りの変更をスタッシュし (そうしないと、ブランチ 1 に戻すことができません)、他のブランチに切り替え、スタッシュを適用し、1234->12345 をブランチ 1 にコミットし、最後にブランチ 1-> ブランチ 2 をマージします。

それはうまくいきましたが、私はGitに比較的慣れていないので、物事を正しく、可能な限り最善の方法で使用しているかどうかはよくわかりません. 上記が理にかなっている場合はお知らせください。そうでない場合は、より良い方法を教えてください。

4

3 に答える 3

1

あなたのアプローチは私には合理的なようです。ただし、別の方法で行います。

  1. ベースコードに間違いが見つかったらすぐに、branch1に隠して切り替え、そこで修正します。テスト、磨き、コミットします。

  2. branch1の古いマージをbranch2に破棄し、手順1の修正を使用してやり直します(手動マージgit-rerereの場合、重複する作業を減らすことができることは理解していますが、使用したことはありません)。歴史。

これにより、「間違いの修正」が実際にbranch1に適切であり、branch2コードの外部で微妙に壊れていないこと、および両方のブランチで同じであることが保証されます。

一方、「それをしないでください」という答えは、「プラグイン」がメインプログラムコードの変更を要求するのは悪いソフトウェアアーキテクチャです。それは実際にはプラグインではありません。これを修正すると、メインプログラムとプラグインは独立したツリーになり(Gitの使用に関する限り)、マージは必要ありません(ただし、qwe→qwerのように互換性のための更新が必要になる可能性があります)。

于 2012-02-17T19:27:33.560 に答える
1

インタラクティブな追加 (git add -p) を使用して、「qwer」の変更をステージングし、それを branch2 にコミットできますが、以下を使用する代わりに:

git stash
git checkout branch1
git stash pop

あなたはできる:

git checkout -m branch1

これにより、変更が branch1 の作業ツリーに転送され、いくつかの git コマンドが節約されます

于 2012-02-18T16:21:09.120 に答える
0

リリース候補ブランチを使用して、さまざまな機能をまとめます。頼れれば頼りたくなる。ここでさらに読む:

http://dymitruk.com/blog/2012/02/05/branch-per-feature/

于 2012-02-17T21:54:19.147 に答える