1. ホーム
  2. git

[解決済み] GITを使用して、あるコミットの変更を別の「フォーク」に選択的にマージするにはどうすればよいですか?

2023-08-12 23:06:36

質問

このシナリオを考えてみましょう。

  1. 私は github.com でコードベースを「フォーク」することに決め、自分のルーチンを実行し始めます。編集 - コミット - プッシュ; 別名、ハック ハック ハック。
  2. 私がいくつか変更を加えた後、他の人が同じプロジェクトで行った変更を見ましたが、私はそれが気に入りました!
  3. 私はそれらを私のものにマージすることにしました。問題は、彼が行ったいくつかのコミットのうち、私はある特定のコミットの「一部分」だけを必要とすることです。

これらの選択された量の変更を私の「フォーク」にマージするための最も効率的な方法は何でしょうか?

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

IRCの世界の波を荒らした後、誰かが素晴らしい解決策を与えてくれました。

git cherry-pick SHA1 --no-commit
git add --patch

同じ疑問を持っている人の助けになれば幸いです。

EDIT: OK、多分それはそれほど単純ではありません。ここに完全な手順があります。

  1. まず、あなたのリポジトリで、必要な cd -を実行し、作業ディレクトリに移動します。

  2. ここで、リモートブランチを追加し、それを取得する必要があります。これを行うには

    git remote add someUser git://github.com/someUser/someRepo.git

    git fetch someUser

  3. のようなコマンドを実行できるようになりました。 git log someUser/master を実行して、'部分的に' マージしたいコミット SHA1 を見つけることができるようになりました。

  4. SHAを取得したら、今度は実行します。

    git cherry-pick -n SHA1

    ここで SHA1 はコミット SHA です。

  5. コミットがどのくらい古いか、プロジェクトの特定の領域がどのくらい頻繁に変更されるかによって、かなりの確率で競合が発生します。申し訳ありませんが、信頼できるエディターでこれらを手動で解決する必要があります。したがって、VIM またはあなたが使用する他の何かを引き出し、あなたが変更を好む段階に到達するまで、競合を切り離します。

  6. これでインデックスをHEADリビジョンにリセットする必要があり、それから信頼できるGIT add --patch コマンドを使用して、どのような変更が必要かを選択することができます。

    git reset HEAD

    git add --patch または git add -p

  7. やったー! コミットタイムです。

    git commit -m "I merged a select amount of changes"

  8. 片付けるために(で断られたもの git add --patch で断ったもの) を一掃し、選択された変更だけを作業用リポジトリに残すには、以下を実行します。

    git reset --hard HEAD

    どうやら git checkout -f も選択肢の一つだそうです。