web-dev-qa-db-ja.com

隠し場所でパッチをフォーマットする方法

Gitでは、変更を隠します。隠しておくパッチを作成することは可能ですか?そして、そのパッチを他のリポジトリ(同僚)に適用しますか?

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

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

119
silverburgh

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

git stash show -p
136
Greg Hewgill

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

出力をファイルに格納するには:

 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
51
calvinf

つかいます

$> 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}

その後、このブランチを公開し、同僚はそのコミットをマージまたはチェリーピックできます。

16
peritus

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

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

編集

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

11
Davide Guerri

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

ブランチAで、stash @ {1}と呼ばれる変更を隠したとします。

ブランチBに切り替えます。

$git stash apply stash@{1}

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

2
stucash