2016-04-01 3 views
0

Имя моего релиза зависит от commit=$(git rev-parse --short HEAD), и я хочу поместить файл релиза в мой репозиторий git. Когда кто-то поправляет фиксацию, изменилось $commit, можно ли повторно использовать $commit после git commit --amend?Git: Как повторно использовать фиксацию rev через commit --amend?

+0

Stackoverflow не любит ответы на простые вопросы: № – jthill

+0

@jthill: Нельзя ли повторно использовать? – coanor

+0

Это то, как создаются идентификаторы commit: у другого контента разные идентификаторы. – jthill

ответ

1

Нет, это невозможно.

Вот некоторые из вещей, которые идут в SHA-1, значение, возвращаемое git rev-parse --short и что заставит ша-1 для изменения:

  • Имени автора
  • Даты совершения
  • сообщение коммита
  • Список родителей

и, самое главное

  • sha-1 всех файлов и каталогов в репозитории. Добавление даже символа пробела в один из файлов сделает невозможным повторение одного и того же ша-1.
0

git commit --amend --no-edit

это сохранить сообщение фиксации (если это то, что вы хотите)

0

Нет, это не возможно.

Это связано с тем, как Git работает на фундаментальном уровне. Каждый коммит в Git и почти все еще в Git - это двоичный объект, называемый blob.

Некоторые капли - это особые изменения файлов, которые вы храните; эти капли не зависят от всех других блоков. Некоторые капли, однако, относятся к другим блокам. Ключ, используемый для обозначения другого blob, - это хэш-файл sha-1 самого блоба. Объект фиксации рекурсивно ссылается на его родительскую запись (по их хэшам) и всем объектам, содержащим состояние репозитория для , которое совершает. Бит фиксации также содержит метаданные, включая метку времени и сообщение фиксации.

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

Невозможно избежать этого. Blobs ссылаются на sha-1 их содержимого; сообщение фиксации - это blob; commit-blob должен каким-то образом содержать информацию фиксации, включая сообщение фиксации.

Смежные вопросы