Git извлечение для указания c commit - не могу восстановить его позже - PullRequest
1 голос
/ 04 марта 2020

Таким образом, в моем проекте я переключился на определенный c коммит:

git журнал (для проверки идентификатора коммита)

git checkout commit_id

Затем я добавил туда некоторые изменения и подтвердил их.

Затем я захожу в другую ветку, чтобы что-то там сделать.

Но теперь я не могу вернуться к своим изменениям, внесенным в коммит. Когда я просто возвращаюсь к commit_id, он там без моих изменений. У меня нет нового коммита в моей ветке, а также не было создано ни одной новой ветки. Но я совершил изменения, которые я там сделал. Так где же мои изменения go? Кто-нибудь знает? (

Ответы [ 2 ]

2 голосов
/ 04 марта 2020

Когда вы извлекаете что-то, что не является ветвью, вы попадаете в состояние «отсоединенная ГОЛОВА»: вы не привязаны ни к одной ветке. Когда вы фиксируете из этого состояния, все работает как обычно, за исключением того, что новый коммит не находится ни в одной ветви. Если вы затем go извлекаете что-то еще, этот новый коммит остается висящим и исчезает из журналов, прежде чем вы получите G C 'd в будущем.

Чтобы восстановить ваш потерянный коммит, вы можете использовать git reflog, которая даст вам историю положения вашей головы и SHA-1 оборванного коммита. Затем вы можете использовать git checkout -b new-branch <sha-1>, чтобы оформить этот коммит и присоединиться к новой ветви.

2 голосов
/ 04 марта 2020

Вы зафиксировали отдельную головку .

Обычно это плохая идея, особенно из-за того, что вы видели: фиксация будет создана, но нет ссылок на нее, поэтому он просто «исчезнет».

Вы можете вернуться к нему, проверив reflog и найдя идентификатор коммита вашего вновь созданного коммита. Но если вы не создадите там ветку или тег, или не выберете его для другой ветви, этот коммит будет «зависшим» и в конечном итоге будет собирать мусор.

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