1. ホーム
  2. git

[解決済み] git: あるレポのコミットによる変更を別のレポに適用する

2022-05-16 20:30:34

質問

私は repo1repo2 をローカルマシンで表示します。これらは非常によく似ていますが、後者はある種の他のブランチ ( repo1 はもうメンテナンスされていません)。

/path/to/repo1 $ git log HEAD~5..HEAD~4
<some_sha> Add: Introduce feature X

コミットによる変更の適用方法 <some_sha>repo1 から repo2 ?

何かパッチを用意する必要があるのでしょうか、それともいくつかの cherry-pick を行うことは可能でしょうか?

同じことをコミット範囲に対して行うのはどうでしょうか?

どのように解決するのですか?

ハックとして GitTips のページにある、異なるふたつのリポジトリでのコミットを比較するためのレシピ を修正してみてください。

GIT_ALTERNATE_OBJECT_DIRECTORIES=../repo/.git/objects \
git cherry-pick $(git --git-dir=../repo/.git rev-parse --verify <commit>)

ここで ../repo は他のリポジトリへのパスです。

最近のGitでは、複数のリビジョンやリビジョンレンジを チェリーピック .

$(git --git-dir=../repo/.git rev-parse --verify <commit>) は、ここで翻訳された <commit> (例えば HEAD または v0.2 または master~2 はコピー元の2つ目のリポジトリでの値)をコミットのSHA-1識別子に変換します。 選びたい変更のSHA-1がわかっている場合は、必要ありません。

注意 しかし、Git はソースリポジトリからのオブジェクトのコピーをスキップすることができます。なぜなら、代替オブジェクトリポジトリが一時的なものであり、一回の操作に過ぎないことを知らないからです。2番目のリポジトリからオブジェクトをコピーする必要があるかもしれません。

GIT_ALTERNATE_OBJECT_DIRECTORIES=../repo/.git/objects git repack -a -d -f

これは、2番目のリポジトリから借用したオブジェクトを元のリポジトリのストレージに入れるものです

テストされていません。


それほどハチャメチャではない解決策は、以下の通りです。 ニットルアンサー :

  • コミットをコピーしたい2番目のリポジトリに移動し、必要なコミットからパッチを生成するために git format-patch
  • オプションで、パッチ (0001-* など) を自分のリポジトリにコピーします。
  • 使用方法 git am --3way でパッチを適用します。