Проблема при попытке сбросить удаленную ветку с git - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть основная ветвь, которую я хочу использовать за источником / мастером. Как я могу удалить последний коммит на удаленном компьютере? Я не могу сделать пу sh, потому что кончик моей текущей ветви находится позади его удаленного аналога, но я не хочу объединять оба.

enter image description here

1 Ответ

1 голос
/ 14 февраля 2020

Как я могу удалить последний коммит на удаленном компьютере?

С технической точки зрения, вы не можете - но вы можете заставить другой Git иметь его master указывает на коммит до последнего. Это заставит другого Git «забыть» последний коммит. Этот коммит будет в конечном итоге удален, когда другой Git сможет запустить команду обслуживания. Это достаточно хорошо, пока никто не вводит этот коммит заново. (Любой другой мог бы в то же время получить коммит с этого сервера.)

Я не могу сделать pu sh, потому что кончик моей текущей ветви находится за его удаленным аналогом ...

Вы можете, и обычно должны , сделать пу sh. Что вам нужно сказать вашему Git, так это отправить свой окончательный запрос в форме команды, а не вежливого запроса.

A git push работает:

  1. если ваш Git вызовет какой-нибудь другой Git;
  2. если ваш Git даст Git новые коммиты, если и когда это необходимо;
  3. завершит сеанс с вашим Git с просьбой прочее Git, вежливо: Пожалуйста, если все в порядке, настройте свою ветвь _____ на фиксацию _____ (заполните поля с названиями ветвей и га sh идентификаторами).

Ваш Git отправит их Git без коммитов (потому что у вас нет ничего нового для них), а затем попросит их установить master, чтобы они указывали на коммит Rediseño del header y del overlay ... (каким бы ни был его фактический идентификатор ha sh, как указано в вашем имени master).

Они скажут нет , и причина, по которой они скажут "нет", которую они также передают, заключается в следующем: Если я это сделаю, Я потеряю доступ к коммиту, тема которого «Заголовок Cabiados Componenttes y» (каким бы ни был его идентификатор ha sh). Этот отказ принимает форму rejected (non-fast-forward), что означает Я могу потерять некоторые коммиты .

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

Что вам нужно сделать, так это перестать вежливо спрашивать. Вместо этого отправьте им убедительную команду: Установите свои master! Они могут по-прежнему отказываются, но если у вас есть разрешения, разрешающие этот вид принудительного пу sh, они будут подчиняться и потеря коммита.

Существует две формы этой принудительной команды:

  • Одна - менее осторожная - это то, что вы получите, если просто запустить git push --force origin master. Это просто отправляет команду: Установите для master значение _____! (заполняя пробел, найдя правильный га sh ID в вашем собственном Git хранилище).

  • Более осторожный способ - git push --force-with-lease. Этот отправляет команду, но в форме: Я думаю, что ваш master - это _______. Если это так, установите его на _______! Если нет, скажите мне, что я ошибался в том, что я думал. Ваш Git заполняет первый пробел тем, что у вас есть в вашем origin/master: идентификатор ha sh, который ваш Git запоминает из последний разговор твоего Git со своими Git. Ваш Git заполняет второй идентификатор ha sh обычным способом.

    Если никто не добавил ни одного new в другой репозиторий Git, ваш origin/master все равно будет соответствовать их master. Если --force-with-lease терпит неудачу , это означает, что кто-то другой, вероятно, использовал тот коммит, от которого вы пытаетесь отказаться; Вы должны git fetch origin забрать новые коммиты и пообщаться с другим человеком, чтобы выяснить, что с этим делать.

Если вы знаю, что никто другой не использует этот другой Git репозиторий или, по крайней мере, эту ветку в этом Git репозитории, достаточно git push --force master. Если вы не уверены, лучше посоветоваться с другими пользователями сначала , даже если вы собираетесь использовать опцию --force-with-lease для безопасности.

...