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

Вишня-выбрать фиксацию и сохранить оригинальный код SHA

Я хотел бы, чтобы cherry-pick совершить фиксацию на выбранном удаленном компьютере, сохраняя при этом исходный код фиксации SHA (моя текущая ветвь основана на этом удалении, который я переустановил в предыдущее состояние).

4b9b3361

Ответ 1

A git SHA-хэш вычисляется из разных частей информации:

  • дерево, к которому относится; в основном, текущее содержимое репозитория в ветке, в которой появляется коммит.
  • SHA от родительского фиксатора.
  • Сообщение commit.
  • информация автора: имя, адрес электронной почты и метка времени.
  • информация коммиттера: имя, адрес электронной почты и временная метка.

Даже если вы отредактируете сделанное на вишне коммит, чтобы дерево, сообщение фиксации, автор и информация об участниках были точно такими же, SHA родительской фиксации (или совершает, если имеет дело с фиксацией слияния) всегда будет другой. Таким образом, вы не сможете генерировать один и тот же SHA-хэш после набора вишни (если только вы не обнаружите столкновение SHA;)).

Ответ 2

Хэш-код SHA сделан из состояния репозитория, используя всю историю до точки фиксации (ветки не включены). Это означает, что вы не можете сохранить оригинальный хеш при наборе вишни, если вся история не будет одинаковой, и в этом случае выбор вишни не имеет смысла.

Ответ 3

В соответствии с вашими комментариями к другим ответам, я думаю, что вы просто хотите сбросить до некоторой удаленной фиксации. Вы можете использовать git reset --hard <SHA> для этого. ПРЕДУПРЕЖДЕНИЕ. При этом будут отменены все ваши (незафиксированные) изменения в рабочем каталоге, и все коммиты, сделанные вами в этой ветке, больше не будут доступны.

Если это не то, что вы хотите (или вы не уверены), пожалуйста, опишите более четко, что вы сделали и что вы хотите сделать или что вы пытаетесь достичь.

Ответ 4

Перейдите в интерактивную перебазировку ("git rebase -i") и вставьте новую запись в конце с точной ревизией, которую вы хотите добавить в свою ГОЛОВУ.

Пример:

Откройте сеанс интерактивной перебазировки:

$ git rebase -i HEAD~4

На экране теперь показано [что-то вроде] этого:

pick efdd0ece Linked how to make a pull requests in README
pick 790a3be8 adjust pytest pins to fix testing infra
pick 5bb90d8f drop 3.4 support
pick 839dc8ba v2.22.0
pick b97fb61a Print the type of the password instead of the password itself

Ваш текущий заголовок является последней записью. Добавьте новую запись внизу (просто "выберите" и свою ревизию; описание не нужно) с точной ревизией, которую вы хотите добавить:

pick efdd0ece Linked how to make a pull requests in README
pick 790a3be8 adjust pytest pins to fix testing infra
pick 5bb90d8f drop 3.4 support
pick 839dc8ba v2.22.0
pick b97fb61a Print the type of the password instead of the password itself
pick 2a173c2a6491aae0772640ba7946a08315d18eb8

Сохраните и закройте. Точная редакция теперь будет вашей ГОЛОВОЙ:

$ git log --oneline | head -n 6
2a173c2a Some commit
b97fb61a Print the type of the password instead of the password itself
839dc8ba v2.22.0
5bb90d8f drop 3.4 support
790a3be8 adjust pytest pins to fix testing infra
efdd0ece Linked how to make a pull requests in README

Как упоминалось в других ответах, вы все равно должны соблюдать правила. Это работает только в очень узком случае, когда у вас точно такая же ветвь, родители и коммиттер (например, с процессом, ориентированным на проверку кода, где у вас есть куча коммитов, поставленных в очередь где-то, где разработчики могут их подтолкнуть вверх и свалить их без предварительной отправки в хранилище); на самом деле, только когда отметки времени - единственное, что могло измениться. В этом случае вы можете принудительно идентифицировать ревизию, чтобы сделать отметки времени неизменными.

В большинстве других случаев родитель, как правило, будет другим, и это само по себе означает, что ваша мечта о принудительном пересмотре определенного варианта будет мертва. Git всегда исправит ревизию, чтобы она была правильной, если какой-либо из факторов, не являющихся временными метками, отличается.