Сбор вишни в Git - PullRequest
       2

Сбор вишни в Git

0 голосов
/ 27 апреля 2018

Я выбрал коммит, сделанный два года назад, и исправил конфликты (а также фиксацию изменений), но когда я попытался, и Черри выбрал коммит пять месяцев назад:

$: git cherry-pick 9f73972f3f619f1357269493e01f07c500d61ed9

On branch get_ndt_up_to_staging_branch
You are currently cherry-picking commit 9f73972.

nothing to commit, working tree clean
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git reset'

Как это правда? Когда я смотрю на github, в коммите есть изменения в различных файлах.

Я что-то не так делаю?

Edit:

Когда я исправил все конфликты, я их зафиксировал и попытался сделать "черри-пик" -продолжить, и это дало мне ту же ошибку. Я сделал вишневый выбор неправильно?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Похоже, что результатом устранения конфликтов является то, что нет необходимости принимать коммит.

Рассмотрим, например, коммит, состоящий из исправления орфографии из одного слова:

--- a/text.txt
+++ b/text.txt
@@ -nn,1 +nn,1 @@
 some context
 is here
-and there was a tyop
+and there was a typo
 in one of the
 lines

Предположим, вы решили выбрать этот коммит. В вашем текущем (HEAD) коммите этот же файл имеет:

some context
is here
but there are no typos
in one of the
lines

Операция cherry-pick скажет вам, что существует конфликт между изменением, которое вы выбираете cherry (который пытается заменить «tyop» на «typo» в этой строке), с версией, которую вы фактически используете (которая вообще не имеет этой строки).

Когда вы посмотрите на файл и подумаете о нем, вы, вероятно, решите использовать последнюю строку, в которой нет опечатки, которую нужно исправить. Эффект от исправления опечатки в этом случае заключается в том, чтобы не менять источник .

Когда вы запустите git cherry-pick --continue, Git скажет вам, что вы не внесли изменений. Теперь вы должны решить:

  • Правильно ли вы разрешили все конфликты или случайно решили конфликт, отбросив изменения, которые хотели бы сохранить ?
  • Если вы правильно разрешили все конфликты, хотите ли вы сделать новый коммит, файлы которого на 100% идентичны оригинальным коммитам? Если это так, используйте git commit --allow-empty.
  • Если вам все-таки не нужны какие-либо изменения, используйте git cherry-pick --abort (чтобы полностью завершить операцию). Это также пишется git reset (я предпочитаю git cherry-pick --abort правописание).
0 голосов
/ 27 апреля 2018

Обычно вы получаете эту ошибку, если изменения в коммите уже есть в текущей версии кода. В этом случае git решает, что cherry-pick выберет коммит, который не вносит изменений, поэтому он спрашивает, хотите ли вы разрешить пустой коммит с --allow-empty.

Если вы исправили конфликты, и результат разрешения снова совпадает с текущим состоянием рабочего дерева и текущим HEAD, то вы получите ту же ошибку.

Я бы порекомендовал присмотреться к git show 9f73972 и сравнить с текущим состоянием вашего рабочего дерева и хранилища.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...