вручную переназначить голову ветки git на отсоединенный объект коммита - PullRequest
0 голосов
/ 25 июня 2019

Я хотел бы повторно использовать объект коммита, который находится в моей базе данных git, который в настоящее время не присоединен ни к одной ветви.

Сценарий таков: давайте вызовем мой последний коммит AA я начал вносить изменения в свое рабочее дерево, но вскоре понял, что в A есть ошибка, которую мне нужно было исправить.Я исправил ошибку и попытался изменить свой коммит, не добавляя других изменений, внесенных в рабочее дерево со времени коммита A.Я сделал это к git reset --soft HEAD^, а затем поставил только то, что было необходимо для исправления ошибки.Затем, вместо того, чтобы делать git commit -c ORIG_HEAD, я случайно сделал git commit -a -c ORIG_HEAD (обратите внимание на -a), так что я закончил тем, что добавил все другие изменения, которые я хотел оставить неизменными.Измененный коммит можно назвать A', чтобы отличить его от исходного коммита.

У меня есть сумма SHA1 для исходного объекта коммита для A, и все BLOB-объекты все еще должны присутствовать, так как это было недавно иЯ ничего не помечал для истечения срока действия.Я подумываю о том, чтобы просто отредактировать .git/refs/heads/branch_name, чтобы он указывал на A, затем расположить вещи в моем рабочем дереве так, как я хочу, и повторно внести изменения в коммит.

Будет ли это лучшим вариантом действий?по этому сценарию?Или есть лучший способ сделать это?

1 Ответ

1 голос
/ 25 июня 2019

Вы можете повторно указать текущее имя ветви, но мне проще и безопаснее просто создать новое имя ветви:

git branch oops <hash>

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

(по умолчанию, для HEAD и для исходного имени ветки, коммиты остаются живыми по крайней мере 30 дней по умолчанию, поэтомуу вас есть столько времени, чтобы создать новое имя.)

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