1. ホーム
  2. git

[解決済み] git-diffからパッチに対応した出力を得ることはできますか?

2022-04-21 01:29:24

質問

とても簡単なことを間違ってやっています。 私は、いくつかの変更を再適用するために、通常のパッチファイルを準備しようとしています。

$ git diff > before
$ git diff something_here > save.patch
$ git checkout . 
$ patch < save.patch
$ git diff > after
$ diff before after
$

something_here 空白 はほぼ動作するのですが、ファイル名が正しくありません。 何かオプションが足りないだけだと思うのですが。

現実には、チェックアウト後にマージを行う予定なので、パッチはそこで失敗するかもしれませんが、私が何を言いたいかはおわかりでしょう。

編集 こちらこそ、間違った質問をしてしまい申し訳ありませんでした。 実際の質問は、変更を保存しておいて、マージを行い、可能であれば変更を再適用したいのですが、可能でしょうか? ということなのですが、私は 中古 この種の問題を解決するためにパッチを使用することと git diff は、それが私に望んでいることのように見えました。

チャールズ・ベイリー氏の コメント が正しい答えでした。 私にとってはgit-applyが正解です(git-stashは必要以上にヘビーウェイトに見えますし、リベースやバンドルは今の私のスキルレベルでは到底無理です)。 Charlesが出した答えを受け入れることにします(コメントを受け入れることはできないので)。 すべての提案に感謝します。

編集、6年後 この問題に詳しい人なら誰でも知っているように、私はその難易度を過大評価していたのです。 git stash . かなり毎日、以下のような順番で使っていきます。

$ git stash
$ git merge
$ git stash pop

解決方法は?

パッチを使う場合は a/ b/ プレフィックスを使用します。これを行うには --no-prefix オプションを使用します (パッチの -p オプションを使用します)。

git diff --no-prefix [<other git-diff arguments>]

しかし、通常はストレートな git diff に送り、その出力で git apply .

ほとんどの場合、私はテキストによるパッチを使わないようにしています。通常、1つ以上の一時的なコミットとrebaseを組み合わせています。 git stash とバンドルの方が管理しやすい。

あなたの使用例では、私は stash が最も適切です。

# save uncommitted changes
git stash

# do a merge or some other operation
git merge some-branch

# re-apply changes, removing stash if successful
# (you may be asked to resolve conflicts).
git stash pop