Подтвердить что ты не робот

Как выбрать вишню из шкафа в git?

Мне интересно, возможно ли выбрасывание вишни из прилавка.

git stash save "test cherry-pick from stash"

*git cherry-pick [email protected]{0}* --> Is this possible?

Я получаю следующий exception, когда я пробовал выше command:

Error:

~/Documents$ git cherry-pick [email protected]{0}
error: Commit 4590085c1a0d90de897633990f00a14b04405350 is a merge but no -m option was given.
fatal: cherry-pick failed
4b9b3361

Ответ 1

Проблема заключается в том, что тайник состоит из двух или трех коммитов. При скреплении модифицированное рабочее дерево сохраняется в одном коммите, индексе в одном коммите и (если используется флаг --include-untracked) любые файлы без трещин в третьей фиксации.

Это можно увидеть, если вы используете gitk --all и делаете тайник.

enter image description here

[email protected]{0} указывает на фиксацию, содержащую рабочее дерево.

Тем не менее, вы можете выбирать из этой фиксации, если вы делаете

git cherry-pick "[email protected]{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

Ответ 2

Я раньше этого не делал. Но man-страница на вишневом куске говорит, что она работает только на коммитах.

   Given one or more existing commits, apply the change each one introduces,
   recording a new commit for each. This requires your working tree to be
   clean (no modifications from the HEAD commit).

Stashing не является фиксацией и не перемещает HEAD. Таким образом, это невозможно сделать [это только предположение, хотя]