16

ユースケース:コミットをあるgitブランチから別のgitブランチに移動するたびに、次の一連のアクションを実行します。

  1. [作業ブランチにコミット]
  2. git checkout ブランチからマージへ
  3. git cherry-pick target-commit
  4. git push
  5. git checkout ワーキングブランチ

これは唯一の例外を除いて正常に機能します-「gitcheckout」を実行するたびにgit作業ディレクトリの内容が変更され(予期されます)、IDE(IntelliJ IDEA)が内部状態の更新を実行します(監視対象のファイルシステムサブツリーが外部で変更されるため) )。これは、特に多数の小さなコミットの場合に本当に厄介です。

私には2つの方法があります。

  1. 「マスチェリーピック」を実行します。つまり、多数のコミットを実行します。たとえば、営業日の終わりに、それらを別のブランチに移動します。
  2. 2番目のローカルgitリポジトリがあり、その上でチェリーピックを実行します。つまり、実際のコミットとプッシュが作業ブランチに対して実行されるたびに、その2番目のリポジトリに移動し、変更をプルして、そこでチェリーピックを実行します。

特定のコミットを移動するのを忘れる可能性があるため、最初のアプローチは好きではありません。2つ目は少し...不自然に見えます。

基本的に、ディレクトリを更新せずにgit'このコミットをbranchXという名前のブランチからブランチbranchX+1'に移動すると言うことができれば完璧です。

質問:上記を実行することは可能ですか?

4

3 に答える 3

9

いいえ、作業ディレクトリを変更せずにブランチ間でコミットを移動することはできません。これは、最終的に競合に遭遇するためであり、その時点で git が一時停止するため、競合を修正できます。直接の作業がその状態を表していない場合、競合を正しく修正することはできません。

周りを見回すと、SO でこの問題の解決策が他にもたくさん見つかりますが、根本的な問題は、エディターがその下から変更されたファイルを処理していないように思えます。これは基本的にgitを使用するという事実です。そのため、エディターを更新するか、git ワークフローにより適したものに移行してください。

于 2010-10-07T21:29:52.547 に答える
1

変更を頻繁にマージする必要がない場合は、変更を行う代わりに、たまに変更を行うcherry-pickのはどうgit merge <working branch>ですか<branch to merge into>?これは、私が間違っていなければ、前回のマージ以降のすべての変更をチェリーピックするのと同じです(このアプローチでは、コミットを忘れるリスクはありません)。このように、「編集者の問題」はあまり発生しません。

于 2010-10-07T13:01:15.993 に答える