問題タブ [git-branch-sculpting]
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 - Git リポジトリを線形履歴に結合するにはどうすればよいですか?
1995 年から 1997 年と 1999 年から 2013 年の 2 つの製品開発期間からのコミットを含む2 つの git リポジトリR1
とがあります。R2
(既存の RCS および CVS リポジトリを Git に変換して作成しました。)
プロジェクトの線形履歴の正確なビューを含む単一のリポジトリに 2 つのリポジトリを結合するにはどうすればよいですか?
R1
と の間のR2
ファイルが追加、削除、および名前変更されていることに注意してください。
空のリポジトリを作成して、その内容をマージしてみました。
ただし、これにより、リビジョンD
ではなくリビジョンにあった最後のファイルが残りK
ます。合成コミットを作成して、マージ間の余分なファイルを削除することもできますが、これは私にはエレガントではないようです。さらに、このアプローチにより、最終結果には実際には発生しなかったマージが含まれます。
git - 複数のブランチにまたがる Git インタラクティブ リベース
削除したい機密コンテンツを含むソースファイルを持つgitリポジトリがあります(ファイルを削除したくないので、そのコンテンツを修正するだけです)。コミットは、プロジェクト開発のかなり早い段階 (ブランチが 1 つしかなかったとき) でしたが、現在は他の n 個のブランチでその役割を果たしています。
すべてのブランチでクリーンアップするために実行できる git-fu はありますか? インタラクティブなリベースは、一度に 1 つのヘッドのみを機能させます。
私はgithubでこのコマンドを見つけました:
ただし、削除に対してのみ機能し、修正に対しては機能しません。
git - トピック Git ブランチのすべてのコミットを削除するには?
次の履歴があるとします。
次のように、すべてのトピック ブランチとそのコミットを削除することは可能ですか。
A-B-C-D-E master
git - コミット履歴を削除せずに git ブランチを削除/非表示にする
状況:
私は、メインの開発ブランチとそこから派生する多くの「実験」ブランチを含むメイン リポジトリを持っています (例: exp1
and exp2
)。これらの実験ブランチの目的は、数値結果を生成する実験のプレースホルダーとして機能することです。実験ブランチのブランチ名 (およびコミット ID) を記録して、コミットに戻って結果の背後にあるコードと履歴を正確に確認できるようにします。
しかし、現在、実験ブランチが多すぎて、メイン ツリーが見えにくくなっています。そのため、各結果セット (つまり、各実験) の背後にあるコードにプレースホルダーを保持するための戦略を再考しています。明らかに、各ブランチで作業ディレクトリを保存することもできますが、コミット履歴も保持するとよいでしょう。
考えられる解決策:
これに対処する 1 つの方法は、実験ブランチを独自の独立したリポジトリに移動することです。各リポジトリは、dev ブランチのコミット履歴内の適切なノードの子ノードにルートされます。これが私が何を意味するかの実例です:
画像の拡大版 (imgur.com) については、ここをクリックしてください。
たとえば、 branch の場合、commit をルートとする別のリポジトリにexp1
コミットをエクスポートしたいと思います。次に、コミットのハッシュを記録するだけで、ブランチがどこから派生したかがわかります。A->B->C
A
P1
exp1
質問:
どうやってやるの?
より良い質問:
一方で、私がやりたいことを実行するためのはるかに優れた戦略があると強く思っています。つまり、目視検査のためにツリーを整理し、必要に応じてそれらに戻ることができるように、プレースホルダーを前のブランチに保持します。では、誰でもこのための戦略を推奨できますか?
git - フィーチャー ブランチ ベースのリベース ワークフローを使用する場合、マスターのマイナーな変更のためにブランチを保持するにはどうすればよいですか?
以前はマージ ワークフローを使用していましたが、現在のチームはリベース ワークフローを使用しています。
その中で、フィーチャー ブランチはマスターからフォークされ、マスターでリベースされ、マスターにスカッシュ マージされます。
機能ブランチに簡単に収まるようにマスターに小さな変更を加えるためのブランチを保持したいと思いますが、問題を減らす解決策が何であるかはわかりません。
- マスターから minor_changes を fork し、それをフィーチャー ブランチ (潜在的にはそれらの多く) にマージし、後でフィーチャー ブランチをマスターにスカッシュ マージします。
- master から minor_changes を fork し、minor_changes を使用して (潜在的に多くの) フィーチャー ブランチをリベースし、後でフィーチャー ブランチをマスターにスカッシュ マージします。
最初のオプションで問題が発生するかどうかはわかりません.2番目のオプションでは、最終履歴でコミットが重複する可能性があると思います.
これを処理する最善の方法はどれですか?
git - 単一の git リポジトリで複数のライブ コード ストリームを設計および維持する方法
2 つのライブ バージョンを含むプロジェクトがあります (新しいバージョンは後方互換性がないため、2 つの完全に別のコード ストリーム)。質問: git をどのように設計すればよいですか (ベスト プラクティスを探しています):
1) 同じレポに両方のバージョンの 2 つの個別のマスター ブランチと開発ブランチを用意する (個別のレポを持ちたくない)
2) git タグを使用します (これほど多くのファミリはなく、これが Bamboo ビルド サーバーで機能するかどうかはわかりません)。
3) その他のオプション..
この分野での助けは非常に役に立ちます!
git - デタッチされたヘッドで行われたマスター コミットへのプッシュ
以前のコミットからの変更をやり直したいと思っていました。
だから私は7f9dd753d39fd65b4272af713ef9c07a9f84f016でそれを壊し、54561ed320633e72bb35a7ab668a9996e6ffca8fからそれを解除することにしました
ここまでは順調です。では、修正を行いましょう。
しかし今、これをマスターに戻し、アップストリームにする必要があります。ここで厄介な部分が来ます...
そうです...だから今私は立ち往生しています。もっと奇妙なことを試してみましょう
git up は私たちに話しかけません。とにかく私はそれを本当に必要としません。
何?いいえ!コミットして戻ってきてください、私はあなたを愛しています。
失った!永遠に?ないことを願っています..
OK、彼らは野生のどこかにいますが、どうすればそれらを取り戻すことができますか? さよならを言うのはまだ早い。
ヘルプ?
git - 古いコミットからの Git ブランチ
SOおよびその他のドキュメントでこれを調査しました。リベース、マージ、チェリーピッキング、デタッチヘッドを試しました。
これを文字通り6時間試みた後、質問をする時が来ました!
これが私が始めていることです:
変更したいのは次のとおりです。
私が来た最も近いものは次のとおりです。
ブランチを機能させるには、別のブランチ名とダミーのコミットを追加する必要がありました。
しかし、これは変化がないよりも悪いことです。
助けてください!
返信後に更新
返信ありがとうございます。
はい、私の「欲しいもの」はあまり明確ではありませんでした。うまくいけば、これはそれを明確にします:
つまり、F の「マスター」は、B とブランチ「dev」がマージされた結果です。
まだ動作していません
回答を試みてくれた@frasertweedaleに感謝します。
私はあなたの指示に注意深く従いましたが、最終的には次のようになりました。
これが難しいことを嬉しく思います。これに 7 時間を費やした今、私はそれほど悪くはありません!
最終結果 @frasertweedale が言ったように、これはぶら下がっているコミットを除いて、まさに私が望んでいたものです。
したがって、ぶら下がりを取り除く必要があります。
わかりやすくするために、以下に再描画しました。
そして、このコマンドはクリーンアップを行います:
結果:
「merge branch 'dev'」には元の F コミットが含まれており、もちろん、そのように再コメントすることができます。