web-dev-qa-db-ja.com

gitの隠し場所からチェリーピックする方法は?

隠し場所からのチェリーピッキングは可能かと思います。

git stash save "test cherry-pick from stash"

*git cherry-pick stash@{0}* --> Is this possible?

上記のexceptionを試したところ、次のcommandが表示されます。

Error

~/Documents$ git cherry-pick stash@{0}
error: Commit 4590085c1a0d90de897633990f00a14b04405350 is a merge but no -m option was given.
fatal: cherry-pick failed
23

問題は、スタッシュが2つまたは3つのコミットで構成されていることです。スタッシュする場合、変更された作業ツリーは1つのコミットに格納され、インデックスは1つのコミットに格納され、(--include-untrackedフラグを使用している場合)追跡されていないファイルは3番目のコミットに格納されます。

gitk --allを使用してスタッシュを実行すると、これを確認できます。

enter image description here

stash@{0}は、作業ツリーを含むコミットを指します。

ただし、そうする場合は、そのコミットからチェリーピックすることができます

git cherry-pick "stash@{0}" -m 1

cherry-pickがstashがマージであると見なし、したがって-m 1パラメーターが必要な理由は、グラフに示されているように、stashコミットに複数の親があるためです。

さくらんぼ狩りで何を達成したいのか正確にはわかりません。考えられる代替案は、隠し場所からブランチを作成することです。そこで変更をコミットし、それらを現在のブランチにマージします。

git stash branch stashchanges
git commit -a -m "changes that were stashed"
git checkout master
git merge stashchanges
33
Klas Mellbourn