どのようにしてgit diffファイルを取得し、同じリポジトリのコピーであるローカルブランチに適用しますか?


491

同僚が作成した.diffファイルがあり、そのdiffファイルにリストされている変更をまったく同じリポジトリのローカルブランチに適用したいと考えています。このdiffファイルの生成に使用されたワーカーのPCまたはブランチへのアクセス権がありません。

もちろん、1行ずつ入力してすべてを再入力することもできますが、システムに人的エラーが発生することはありません。これを行う最も簡単な方法は何ですか?

回答:


746

差分ファイルをリポジトリのルートにコピーして、次のようにします。

git apply yourcoworkers.diff

applyコマンドの詳細については、そのマニュアルページを参照してください

ちなみに、コミット全体をファイルで交換するためのより良い方法はgit format-patch、送信者と受信者のコマンドの組み合わせです。これはgit am、作成者情報とコミットメッセージも転送するためです。

パッチアプリケーションが失敗し、差分の生成元のコミットが実際にリポジトリ内にある場合、その-3オプションを使用applyして、変更をマージすることができます。

また、次のようにUnixパイプでも機能します。

git diff d892531 815a3b5 | git apply

3
返信いただきありがとうございますが、パッチが失敗しました:filename.php:202 error:filename.php:パッチは適用されませんでした。朗報ですが、これはファイルの最初のファイル名ではないため、少なくともファイルの一部を処理できたはずです。何かご意見は?
Mike_K

4
また、そのファイルに変更があり、パッチが機能しなくなったようです。これを解決するには、変更をコミットし、新しいブランチを作成し、自分と同僚が分岐したコミットにリセットし、パッチを適用してコミットし、2つのブランチをマージします。
フィリップ

3
@orlybgまだコミットしていない場合はgit reset --hard、作業ツリーを最後のコミットに戻すようにしてください。すでにコミットしている場合は、戻したいリビジョンを追加します。
フィリップ

5
@orlybg申し訳ありませんが、あなたは台無しにされています。Gitは、コミットを行ったときに戻ることができるチェックポイントのみを作成します。これが、多くのgitガイドが早期かつ頻繁コミットすることを推奨している理由です。
フィリップ

4
@orlybgは、少なくとも、元git stashに戻したいアクションを実行する前に実行します。その後、どちらの方法でも、隠し場所に戻して、後でコミットできます。
モーリス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.