問題タブ [cherry-pick]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 特定のコミットを削除
私は友人と一緒にプロジェクトに取り組んでいましたが、彼は編集してはならない大量のファイルを編集してしまいました。どういうわけか、私は彼の作品を自分の作品にマージしました。これらのファイルへの編集を含むコミットを削除する方法を見つけようとして、私は長い間探して遊んでいました。リバートとリベースの間でトスされているようで、簡単な例はありません。ドキュメントは、私が自分よりも多くのことを知っていると想定しています。
したがって、ここに質問の簡略版があります:
次のシナリオで、コミット 2 を削除するにはどうすればよいですか?
期待される結果は
これは、私が元に戻そうとした方法の例です
git - チェリーピッキングとリベース
以下は、私がよく直面するシナリオです。
master
またはに一連のコミットがあり、ブランチdesign
の上に置きたいと思います。production
production
これらのコミットをチェリーピックしてマージするため、ベースを持つ新しいブランチを作成する傾向がありますproduction
次に、master
本番環境にマージすると、変更が同じであっても、チェリーピックのために別のコミットとして登録されるため、マージの競合に直面します。
これに対処するためのいくつかの回避策を見つけましたが、それらはすべて面倒であり、「ハック」と呼ぶことができます。
私はあまりリベースを行っていませんが、それによっても新しいコミット ハッシュが作成されると思います。
チェリーピッキングしている場所でリベースを使用する必要があります。これよりも他にどのような利点がありますか。
git - git の複数のブランチ間で単一のファイルを共有するにはどうすればよいですか
ソフトウェアが含まれているリポジトリmaster
が branchにあり、そのホームページが branch にありgh-pages
ます。プロジェクトには、ブランチexamples
に含める必要があるソース ファイルを含むディレクトリが含まれています。master
ホームページには、コンパイルされた例と、場合によってはソース ファイルも含まれている必要があります。master
両方のブランチ間でサンプル (コンパイルするブランチに依存する) を共有するにはどうすればよいですか? 望ましいワークフローは次のとおりです。
ブランチgh-pages
には既に例が含まれている可能性があるため、このブランチに切り替えるだけで、新しくコンパイルされたファイルが上書きされます。master
コンパイルされたファイルは、ブランチにコミットしないでください。別のブランチを作成することを考えましexamples
たが、これは実際には簡単ではありません。git submodule が特定のブランチを指すことができれば (できますか?) examples
、サブモジュールとして他のブランチで使用されるブランチを作成できます。サンプルを別のリポジトリに移動することもできますが、すべてを 1 つのリポジトリに保持することをお勧めします。マージ マネージャまたはチェリー ピッキング マジックが存在する可能性があります。
git - 一度に1つずつgitで一連のコミットをプルする方法は?
フォークに一連のコミットがあり、一度に 1 つずつ適用または拒否します。これには git cherry-pick を使用する必要がありますか?
tfs - TFS では、変更セットを無関係なブランチにチェリーピックするにはどうすればよいですか?
私はクリーンアップしようとしている非常に乱雑な TFS 構造を持っています (前任者のおかげです)。親/子関係のないブランチから別のブランチに変更セットを選択的に移動する必要があり、それらの変更を共有トランクを通過させたくない状況があります。これどうやってするの?
ベースレス マージを試してみました - TFS では、特定の変更セットに対してベースレス マージを行うにはどうすればよいですか? - マージする変更がないことを教えてくれました。
私が達成したいのは、このTFS のようなものです:シェルブセットを別の場所に復元できますか? 変更セットを除いて。
GITでは、これは単純なチェリーピックだと思います。
私の構造は次のようになります。
問題は、X を通過せずに C2 を Y から Z に取得するにはどうすればよいかということです。
git - Git チェリー ピッキングのマージ追跡?
たとえば、dev
ブランチとstable
ブランチがあります。
dev
からまでのいくつかのコミットをチェリーピックした場合stable
。
dev
チェリー ピックされたコミットを Git に認識させ、重複した範囲を後でマージ、リベース、またはチェリー ピックした場合に二重にマージしないようにする方法はありますstable
か? (これはSVNの基本的なマージ追跡機能です)
git - Git:作業ディレクトリを変更せずにブランチ間で変更を移動する
ユースケース:コミットをあるgitブランチから別のgitブランチに移動するたびに、次の一連のアクションを実行します。
- [作業ブランチにコミット]
git checkout
ブランチからマージへgit cherry-pick
target-commitgit push
git checkout
ワーキングブランチ
これは唯一の例外を除いて正常に機能します-「gitcheckout」を実行するたびにgit作業ディレクトリの内容が変更され(予期されます)、IDE(IntelliJ IDEA)が内部状態の更新を実行します(監視対象のファイルシステムサブツリーが外部で変更されるため) )。これは、特に多数の小さなコミットの場合に本当に厄介です。
私には2つの方法があります。
- 「マスチェリーピック」を実行します。つまり、多数のコミットを実行します。たとえば、営業日の終わりに、それらを別のブランチに移動します。
- 2番目のローカルgitリポジトリがあり、その上でチェリーピックを実行します。つまり、実際のコミットとプッシュが作業ブランチに対して実行されるたびに、その2番目のリポジトリに移動し、変更をプルして、そこでチェリーピックを実行します。
特定のコミットを移動するのを忘れる可能性があるため、最初のアプローチは好きではありません。2つ目は少し...不自然に見えます。
基本的に、ディレクトリを更新せずにgit'このコミットをbranchXという名前のブランチからブランチbranchX+1'に移動すると言うことができれば完璧です。
質問:上記を実行することは可能ですか?
git - 分岐した GIT ブランチに同じファイル名変更の変更を適用する
master ブランチと安定したブランチを持つプロジェクトがあります - ブランチはずっと前に分岐しました。これで、stable ブランチにいくつかのコミットができました。master ブランチにもコミットしたいと考えています (バグ修正)。ブランチが分岐し、マージされていない変更がたくさんあるため、マージできません-4つのコミットが必要です。
そこで、チェリーピックを試してみました。ただし、トップレベルのモジュール名が「project-module」スキームから「module」に変更されたため、これは失敗します。チェリー ピッキングの場合、GIT は古いディレクトリ (古いブランチと同様) に新しいファイルを作成します。名前の変更は検出されません。おそらく、次の警告が表示されるためです。
git format-patch + git am を試してみましたが、これでも古いディレクトリにファイルが作成されます。
マスター ブランチにコミットを適用するにはどうすればよいですか?
ありがとう、アダム
git - git cherry-pick -x: 概要ではなく詳細にリンクする
メッセージ「foo」を含むコミット、つまり要約部分のみのコミットが与えられた場合、私はgit cherry-pick -x the_commit
. 結果はメッセージ付きの新しいコミットです
しかし、コメントを手動で編集せずに、git でコメントを以下のようにするにはどうすればよいですか?
git - git cherry-pick はローカルの変更が存在すると言いますが、git status は何も言いません
更新申し訳ありませんが、私は別のブランチに切り替え、再び切り替えましたが、これ以上再現できません:(