EGit после «Изменения предыдущей фиксации» удаленный отправленный код возвращается

#git #egit #git-amend

#git #egit #git-изменить

Вопрос:

У меня есть следующий журнал Git.:

Журнал Git

Я использовал функцию EGit «Изменить предыдущую фиксацию», чтобы изменить сообщение о фиксации на фиксацию с сообщением «Удалить неиспользуемую функцию addSubinterval раньше», которое я уже отправил на сервер Git для «Удаления неиспользуемой функции addSubinterval».

После этого я понял, что у меня есть код обратно в моем файле, который я удалил и отправил на сервер. Это был коммит с сообщением: «Удалить неиспользуемую функцию setDocumentTextAndInfoColor()». Я не знаю, вернулся ли только контент из этого коммита.

Я проверил фиксацию с сообщением: «Удалите «nextrefid» и «nextrefid_nr» для продолжения …». Этот коммит не восстановлен в моем локальном файле.

Это желаемое поведение для «Изменить предыдущую фиксацию»?

Я думаю, это ошибка, но, может быть, я что-то пропустил?

Ответ №1:

Изменение заменяет ваш последний локальный коммит измененным. Но в вашем случае вы уже отправили исходный коммит на свой сервер. В этом случае EGit даже предупреждает вас:

Предупреждение EGit об изменении принудительной фиксации

Я подозреваю, что то, что вы сделали позже, было «Вытащить». Это объединяет удаленную ветку origin/master с вашей локальной веткой master . В вашем случае это означает, что исходная фиксация была объединена обратно в вашу локальную ветку, поэтому вы все еще видите ее в истории.

Если вы действительно хотите удалить исходный коммит с сервера, вам придется использовать то, что называется «принудительным нажатием». Он вызывается так, потому что то, что вы эффективно делаете, — это перезапись / удаление данных на сервере. Если у других людей уже есть исходный коммит (они были извлечены после того, как вы нажали), вам также нужно будет согласовать с этими людьми, чтобы они также могли удалить коммит из своего локального репозитория.

По этим причинам не рекомендуется вносить изменения в коммиты после их отправки (за исключением специальных рабочих процессов, таких как Gerrit, или если вы знаете, что делаете).