[解決済み] GITを使用して、あるコミットの変更を別の「フォーク」に選択的にマージするにはどうすればよいですか?
質問
このシナリオを考えてみましょう。
- 私は github.com でコードベースを「フォーク」することに決め、自分のルーチンを実行し始めます。編集 - コミット - プッシュ; 別名、ハック ハック ハック。
- 私がいくつか変更を加えた後、他の人が同じプロジェクトで行った変更を見ましたが、私はそれが気に入りました!
- 私はそれらを私のものにマージすることにしました。問題は、彼が行ったいくつかのコミットのうち、私はある特定のコミットの「一部分」だけを必要とすることです。
これらの選択された量の変更を私の「フォーク」にマージするための最も効率的な方法は何でしょうか?
どのように解決するのですか?
IRCの世界の波を荒らした後、誰かが素晴らしい解決策を与えてくれました。
git cherry-pick SHA1 --no-commit
git add --patch
同じ疑問を持っている人の助けになれば幸いです。
EDIT: OK、多分それはそれほど単純ではありません。ここに完全な手順があります。
-
まず、あなたのリポジトリで、必要な
cd
-を実行し、作業ディレクトリに移動します。 -
ここで、リモートブランチを追加し、それを取得する必要があります。これを行うには
git remote add someUser git://github.com/someUser/someRepo.git
git fetch someUser
-
のようなコマンドを実行できるようになりました。
git log someUser/master
を実行して、'部分的に' マージしたいコミット SHA1 を見つけることができるようになりました。 -
SHAを取得したら、今度は実行します。
git cherry-pick -n SHA1
ここで
SHA1
はコミット SHA です。 -
コミットがどのくらい古いか、プロジェクトの特定の領域がどのくらい頻繁に変更されるかによって、かなりの確率で競合が発生します。申し訳ありませんが、信頼できるエディターでこれらを手動で解決する必要があります。したがって、VIM またはあなたが使用する他の何かを引き出し、あなたが変更を好む段階に到達するまで、競合を切り離します。
-
これでインデックスをHEADリビジョンにリセットする必要があり、それから信頼できるGIT
add --patch
コマンドを使用して、どのような変更が必要かを選択することができます。git reset HEAD
git add --patch
またはgit add -p
-
やったー! コミットタイムです。
git commit -m "I merged a select amount of changes"
-
片付けるために(で断られたもの
git add --patch
で断ったもの) を一掃し、選択された変更だけを作業用リポジトリに残すには、以下を実行します。git reset --hard HEAD
どうやら
git checkout -f
も選択肢の一つだそうです。
関連
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み] Git で、ステージされていない変更を破棄するにはどうしたらいいですか?
-
[解決済み] Git リポジトリでのマージの衝突を解決するには?
-
[解決済み] ローカルの Git リポジトリが元々クローンされた URL を特定するにはどうすればよいですか。
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】Git リポジトリに空のディレクトリを追加するには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Note: Git prompts このリポジトリで別の git プロセスが実行されているようです ....
-
Git はファイル名の大文字と小文字を無視し、修正する
-
[解決済み] Git で、別のブランチの変更を選択的にマージしたり選択したりするにはどうすればよいですか?
-
[解決済み] Gitでコミットを部分的にチェリーピックする
-
fatal: パス仕様 'readme.txt' がどのファイルにもマッチしなかった Solution
-
[解決済み] gitにもsvnのような無視コマンドはありますか?
-
[解決済み] 単一ファイルのマージをやり直す
-
[解決済み] Gitでは、これらの言葉はどのような意味ですか?リポジトリ、フォーク、ブランチ、クローン、トラック?
-
[解決済み] プル前にローカルとGitHubのリポジトリの差分を確認する方法 [重複]について
-
[解決済み] gitで、stashを適用せずに、追跡されていないstashedファイルを表示する方法はありますか?