Внесение изменений в Git в общий репо - PullRequest
5 голосов
/ 01 мая 2009

У меня есть локальное git-репо, которое я недавно сделал, а затем отправил в общее репо. Только после того, как я отправил его в общий репо, я понял, что совершил ужасную ошибку. Я исправил это локально без проблем после того, как исправил свой источник с помощью:

git commit -C HEAD -a --amend

После этого я попробовал другой источник git push и получаю следующую ошибку:

! [rejected]        mybranch -> mybranch (non-fast forward)

Как лучше всего исправить эту ситуацию?

Ответы [ 5 ]

7 голосов
/ 01 мая 2009

git (по умолчанию) не позволяет вам выдвигать на ветку все, что «перематывает» кончик ветви. Другими словами, если текущая головка ветви не является прямым родителем или предком кончика ветви, тогда в push-запросе будет отказано.

Вы можете попытаться в любом случае нажать, используя опцию -f для git push или используя refspec с начальным '+', например, git push origin +mybranch:mybranch.

Обычно удаленные репозитории все еще не позволяют этому случиться, потому что вы рискуете потерять коммиты, если разные люди могут без разбора выдавать подсказки веток, которые не включают коммиты, которых у них нет локально.

Вы можете отменить это поведение, изменив параметр конфигурации receive.denyNonFastForwards в удаленном хранилище (при условии, что у вас есть соответствующий доступ к удаленному хранилищу).

Если у вас нет такого доступа, вы сможете добиться этого, удалив удаленную ветку и создав ее заново.

, например

git push origin :mybranch
git push origin mybranch

Обратите внимание, что более поздние версии git включают параметр конфигурации receive.denyDeletes, который, если он установлен, предотвратит работу этого потенциально опасного обходного пути.

5 голосов
/ 01 мая 2009

Если вы хотите форсировать толчок, вы можете ... эм ... передать --force на push.

Однако переписывать историю в общедоступном хранилище обычно считается дурным тоном.

2 голосов
/ 01 мая 2009

В этом случае, вероятно, лучше всего сделать второй коммит с исправлением. Поскольку вы уже изменили исходный первый коммит в своем локальном репозитории, вы, вероятно, захотите извлечь его из общего репозитория и переместить HEAD, чтобы ваш измененный коммит мог быть собран сборщиком мусора.

0 голосов
/ 01 мая 2009

Предполагая, что ваше совместное репо позволяет, просто префикс имени ветки со знаком плюс, чтобы форсировать ускоренную перемотку вперед:

git push origin +mybranch
0 голосов
/ 01 мая 2009

Как насчет git reset?

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