В принципе нет ничего плохого в git push --force
.
То, что он делает, это заменяет удаленную главу вашей ветки на вашу местную.
Есть два случая, один, где онЭто нормально, чтобы толкать силы, и один, где это совсем не хорошо:
Если вы сделали ребазинг (и, следовательно, создали новую цепочку коммитов для вашей ветви), ваша ветвь и удаленный разделены, что должно бытьожидается.И ты заставил их разойтись нарочно.Например, ваша ветка не была обновлена до master
, поэтому вы перебазируете ее, чтобы «переместить» поверх master
(технически коммиты воссоздаются с новой базы, в данном случае master
, но фактически этовыглядит так, как будто он был перемещен).Таким образом, вы знаете , что они разошлись и что ваша локальная версия верна.В этом случае хорошо сказать git: «Возьми эту версию, откажись от той, что у тебя есть».
Однако, если вы работаете с людьми в одной и той же ветке, и один человек выдвигает ветку с новыми изменениями, пока вывнесите свои собственные изменения, затем, когда вы захотите нажать, Git также сообщит вам, что ваша локальная ветвь и ее восходящий канал расходятся, и поэтому вы должны сначала потянуть и так далее. В этом случае важно не push --force
, иначе работа вашего коллеги будет стерта, и он / она будет очень расстроен.Таким образом, в этом случае вы действительно должны сначала pull
(я бы порекомендовал pull --rebase
не создавать коммит слияния и сохранять вашу историю чище, но это очень субъективно), затем push
(и после вытягивания нет --force
понадобится).
Суть в том, что вы знаете, что делает git push --force
, знаете, когда можно перезаписать вышестоящий поток вашим локальным (вы можете затем принудительно нажать), а когда все не в порядке (вам нужновытащить).
И чтобы вернуться к исходному случаю, вы перебазировали свою ветку, поэтому она разошлась (по определению), так что если вы работаете в одиночку на ветке или если вы убедились, что никто ничего не толкал нав то же время, git push --force
- это то, что вам нужно.