隠しておいたものでパッチをフォーマットするにはどうすればよいですか


140

gitでは、自分の変更を隠しておきます。隠しておいたパッチを作成することは可能ですか?そして、そのパッチを他のリポジトリ(私の同僚のもの)に適用しますか?

私は知ってgit format-patch -1いますが、私がコミットしたことのためだと思います。しかし、私は隠しておいた変更について同じことを探しています。

また、他のリポジトリにパッチを適用するにはどうすればよいですか?

回答:


155

確かに、git stash showこれをサポートします:

git stash show -p

したがって、使用

git stash list

パッチとしてエクスポートするスタッシュの番号を見つけるには、

git stash show -p stash@{<number>} > <name>.patch

それをエクスポートします。

例えば:

git stash show -p stash@{3} > third_stash.patch

1
パッチの適用に関して関連する質問があります。私のパッチが複数のファイルに触れるとしましょう。パッチを「インタラクティブに」適用する方法はありますか?パッチを適用する必要があるパッチのファイルを選択してください。それをしてもいいですか?
2010年

1
@silverburgh:ざっと目を通しましたがman patch、インタラクティブパッチアプリケーションのオプションはありませんでした。ただし、パッチファイルはそれ自体がプレーンテキストファイルであるため、通常は、パッチをテキストエディタで編集して、で適用する関連部分をクリップアウトしますpatch。または、パッチを別のGitリポジトリに適用する場合は、すべてを適用してgit checkoutから、変更したくないファイルを選択的に選択できます(git checkoutファイル名を指定すると、段階的な変更が破棄されます)。
グレッグヒューギル

1
@silverburgh git applyの "--exclude"および "--include"パラメータを使用してパッチを適用するファイルのセットを制限できます。
ケルビン

@silverburghパッチがあると仮定して、次のことができます。パッチを完全に適用してから実行するgit add --interactive ${YOUR_FILES}と、部分的にコミットする機会が与えられます。
アレックス

15
ありがとう。これは私にとってうまくgit stash show -p stash@{1} > patch.txt
ライアン

63

この回答は、パッチの保存と、使用する場所への適用に関する情報を提供します。

出力をファイルに隠しておくには:

 git stash show -p --color=never > my-patch-name.patch

パッチが問題ないことを確認します。

git apply --stat my-patch-name.patch

エラーがないことを確認します。

git apply --check my-patch-name.patch

パッチを適用する

git apply my-patch-name.patch

これはプレーンテキストのコードファイルで機能しましたが、空白を考慮する必要がありました。パッチルックスの良い点を確認します。 git apply --check --ignore-space-change --ignore-whitespace my-patch-name.patch パッチを適用します: git apply --ignore-space-change --ignore-whitespace my-patch-name.patch
クレイグ・ボーランド

素敵で簡潔な説明。これが機能するためには、パッチを適用するときにレポルートにいる必要があり、そうでgit applyない場合は差分を取得しませんでした。
最大

16

使用する

$> git stash list
stash@{0}: WIP on master: 84fx31c Merged with change to /public/
stash@{1}: WIP on master: 463yf85 FlupResource: also takes json as a query parameter

最近隠されたもののリストを取得します。隠しておくと、Gitは実際にはコミットオブジェクトを作成します。

彼らは他のすべてのようにコミットです。あなたはブランチでそれらをチェックアウトすることができます:

$> git checkout -b with_stash stash@{0}

次に、このブランチを公開し、同僚がそのコミットをマージまたは選択することができます。


13

上記のソリューションはバイナリデータに対しては機能しません。次のサポートを追加します。

git stash show stash@{0} -p --binary

編集する

注:上記の返信にコメントを追加したいだけですが、私の評判は十分ではありません。


3

これは最近のGitの更新の1つかもしれないと思います。隠しておいた変更をパッチする必要はもうありません。隠された変更を1つのブランチから別のブランチに適用することができます。

ブランチAで、stash @ {1}と呼ばれるいくつかの変更を隠しておきます。

ブランチBに切り替えます。次のようにできます。

$git stash apply stash@{1}

これにより、ブランチAの変更がブランチBに適用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.