Коммит удален в локальном Git

Моя последняя фиксация удалена. Мои команды:

 git branch
* (detached from a96f277)
  help
  master
  omid
  reza
  rezalocal

git commit
is commited

git push
cant push

git checkout master
git merge master a96f277
: a96f277 is not found!

git checkout a96f277
git log
: my last commit not found;

Это показывает мою последнюю фиксацию, и все мои правки и добавленный файл удаляются!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
53
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы не можете нажать, потому что, когда вы делали коммит, вы не были ни на одной ветке. Сделанный вами коммит принимает a96f277 в качестве своего родителя, но нигде не упоминается и будет кандидатом на сборку мусора.

И действительно, git намекает на это, когда вы фиксируете делать в состоянии detached HEAD, он выводит что-то вроде этой формы:

Warning: you are leaving 1 commit behind, not connected to any of your branches:

abcdef123 HEAD test

If you want to keep it by creating a new branch, this may be a good time to do so with:

git branch abcdef123

Вы должны были заранее проверить ветку, в которой нужно совершить коммит, но еще не поздно, так как теперь вы можете просто создать ветку в этом коммите и объединить ее с master :

git checkout -b temp <commitHash>
git checkout master
git merge temp

(где <commitHash> можно найти в вашем недавнем выводе, когда вы совершили коммит после a96f277) (если не в выводе, получите его в своем reflog)

После этого вы сможете нажать master как обычно.

я запускаю ваши команды, и создается временная ветка, но при запуске git log в временной ветке не отображается моя последняя фиксация, и ее можно удалить.

Omid Ahmadyani 07.05.2019 10:31

Вы зафиксировали [скажем, хэш xyz123] поверх a96f277, а затем переключились на master. Если вы сейчас вернетесь к a96f277 с помощью git checkout a96f277, вашего последнего коммита xyz123 там не будет, поскольку вы указываете на его предыдущий коммит.

Теперь коммит xyz123 висит, так как на него не указывает ветка. Чтобы получить идентификатор коммита для этого, вы можете сделать git reflog. Это даст вам историю всех операций, которые вы сделали [пока цикл сборки мусора git не запущен].

Затем вы можете найти фактический идентификатор коммита для xyz123, а затем выйти из него, создать новую ветку и отправить ее на удаленный сервер.

Надеюсь это поможет!

Ответ принят как подходящий

a96f277 — это начальная точка отсоединенного HEAD, и ваш коммит опережает его.

Чтобы узнать хэш вашего коммита, вы можете либо найти вывод git commit, который вы запустили, либо использовать git reflog.

После того, как вы его найдете, предположим, что это abc123,

git checkout master
git cherry-pick abc123
# or
git merge abc123

я использовал reflog и нашел свою фиксацию после этого, я объединил ее с мастером

Omid Ahmadyani 07.05.2019 11:03

Другие вопросы по теме