[解決済み] 2 つの Git リポジトリをマージする方法は?
2022-03-18 09:21:10
質問
次のようなシナリオを考えてみましょう。
私は小さな実験的プロジェクトAを独自のGitレポで開発しました。それが成熟してきたので、A を大きなプロジェクト B の一部としたいと思います。B は独自の大きなリポジトリを持っています。そこで、A を B のサブディレクトリとして追加したいと思います。
A を B にマージするにはどうすればよいでしょうか。
どのように解決するのですか?
他のリポジトリの単一のブランチは、その履歴を保持するサブディレクトリの下に簡単に配置することができます。例えば
git subtree add --prefix=rails git://github.com/rails/rails.git master
これは、Rails masterブランチのすべてのファイルが"rails"ディレクトリに追加された、単一のコミットとして表示されます。 しかし、コミットのタイトルには古いヒストリーツリーへの参照が含まれています。
<ブロッククオート
コミットから'rails/'を追加
<rev>
どこ
<rev>
はSHA-1コミットハッシュです。まだ履歴を見ることができ、いくつかの変更を責めることができます。
git log <rev>
git blame <rev> -- README.md
これは実際の古いブランチをそのまま残したものなので、ここからディレクトリのプレフィックスを見ることはできないことに注意しましょう。 これは通常のファイル移動のコミットと同じように扱うべきです。
# finishes with all files added at once commit
git log rails/README.md
# then continue from original tree
git log <rev> -- README.md
他の回答にあるように、手動で行うか、履歴を書き換えるなど、より複雑な解決方法があります。
git-subtree コマンドは公式の git-contrib の一部であり、いくつかのパケットマネージャはデフォルトでこれをインストールします (OS X Homebrew)。 しかし、gitに加えて自分でインストールする必要があるかもしれません。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] Git リポジトリでのマージの衝突を解決するには?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] masterブランチと'origin/master'が分岐している、'undiverge'ブランチの方法は?
-
[解決済み】fatal: 有効なオブジェクト名ではない: 'master'
-
[解決済み] あなたのブランチは 'origin/master' より 3 コミット進んでいます。
-
[解決済み】なぜ「git commit」は私の変更を保存しないのですか?
-
[解決済み] "would clobber existing tag "を取り除くには?
-
[解決済み] TortoiseGitで「git did not exit cleanly (exit code 128)」というエラーを解決するには?[クローズド]
-
[解決済み] VSTS Git Fetch Failed with exit code: 128
-
[解決済み] 現在の支店にはトラッキング情報がありません
-
[解決済み] GitHubです。パーミッションが拒否されました (公開鍵)。
-
[解決済み】既存のGitリポジトリを別のリポジトリにインポートする方法は?