Как изменить SHA-1 конкретного коммита с git? - PullRequest
0 голосов
/ 16 августа 2011

Целевой коммит может иметь родителей и потомков.

необходимо заменить старый коммит вместо ,

так что это не так просто, как команда cherry.

Мой вопрос будет ждать точного решения .

Ответы [ 3 ]

4 голосов
/ 16 августа 2011

Нет, вы не можете этого сделать.

Смысл SHA-1 - предотвратить подобные изменения.Вся архитектура git зависит от предположения, что SHA-1 однозначно идентифицирует объект во всем git-хранилище.Нет способа обойти это (не без переделки всего, что есть).

Подробности описаны в Git Magic book .

0 голосов
/ 16 августа 2011

Хорошо, давайте посмотрим, поможет ли это.

ПРЕДУПРЕЖДЕНИЕ:

  • Это прерывание (некоторые) pull / push / fetch.
  • Не все команды поддержки gitthis.
  • Он не делится с другими пользователями.
  • Это не меняет коммит, он заменяет его.

Вы уверены, что хотите это сделать?Прокрутите вниз, если да.


Это называется точка пересадки .Вы создаете файл .git/info/grafts и имеете следующую информацию:

<commit-id> <new-parent-of-the-commit>

Допустим, у вас есть это:

/---D
A---B---C

Теперь вы хотите заменить B на D (без изменения идентификатора коммита), вы кладете это в графт:

<commit-id-of-C> <commit-id-of-D>

Он сохраняет старый commitid с ограничением, указанным выше.

0 голосов
/ 16 августа 2011

Я не знаком с Git, но в Mercurial вы можете сделать это: извлеките последний коммит из репозитория и сохраните его в «патче» (hg qimport). Результатом является репо без каких-либо следов последнего коммита плюс патч, который даст вам начальное состояние.

Таким образом, рецепт состоит в том, чтобы выталкивать вещи из репо, пока коммит для модификации не станет HEAD. Скопируйте, что тоже измените патч (или примените патч без коммита и измените рабочее пространство).

Теперь вы можете зафиксировать новую версию и применить все остальные патчи.

Поскольку Git и Mercurial очень похожи, вероятно, есть команда Git для достижения того же, но я не знаю ее названия. Может быть, этот ответ может помочь: https://serverfault.com/questions/12373/how-do-i-edit-gits-history-to-correct-an-incorrect-email-address-name

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