Git push после ребаз - PullRequest
       12

Git push после ребаз

0 голосов
/ 14 мая 2019

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

git checkout master
git pull
git git checkout feature
git rebase origin/master

then resolve all the problems....
Try to push - not gonna happen...

git действительно говорит мне, что после перебазирования (работы с n: ths конфликтов)

У меня есть два варианта, используйте --force, что кажется рискованным и глупым.

или pull снова и снова иметь дело с конфликтами слияния ... и окажетесь в той же ситуации?

error: failed to push some refs to 'ssh://git@git.zzz.com/yyy/xxx.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Локально: ветвь функций, мастер (актуально)

и удаленный доступ: featureBranch (который впереди?!) И master.

Я просто хочу обновить свою ветку функций, чтобы она была даже ближе к версии на master ... Почему мерзавец такой ...

Я читал много веток по этому поводу, и, похоже, единственным решением является использование --force

Мне кажется, что это решение вообще не является решением для такого часто используемого инструмента ...

1 Ответ

4 голосов
/ 14 мая 2019

В принципе нет ничего плохого в git push --force.

То, что он делает, это заменяет удаленную главу вашей ветки на вашу местную.

Есть два случая, один, где онЭто нормально, чтобы толкать силы, и один, где это совсем не хорошо:

Если вы сделали ребазинг (и, следовательно, создали новую цепочку коммитов для вашей ветви), ваша ветвь и удаленный разделены, что должно бытьожидается.И ты заставил их разойтись нарочно.Например, ваша ветка не была обновлена ​​до master, поэтому вы перебазируете ее, чтобы «переместить» поверх master (технически коммиты воссоздаются с новой базы, в данном случае master, но фактически этовыглядит так, как будто он был перемещен).Таким образом, вы знаете , что они разошлись и что ваша локальная версия верна.В этом случае хорошо сказать git: «Возьми эту версию, откажись от той, что у тебя есть».

Однако, если вы работаете с людьми в одной и той же ветке, и один человек выдвигает ветку с новыми изменениями, пока вывнесите свои собственные изменения, затем, когда вы захотите нажать, Git также сообщит вам, что ваша локальная ветвь и ее восходящий канал расходятся, и поэтому вы должны сначала потянуть и так далее. В этом случае важно не push --force, иначе работа вашего коллеги будет стерта, и он / она будет очень расстроен.Таким образом, в этом случае вы действительно должны сначала pull (я бы порекомендовал pull --rebase не создавать коммит слияния и сохранять вашу историю чище, но это очень субъективно), затем push (и после вытягивания нет --forceпонадобится).

Суть в том, что вы знаете, что делает git push --force, знаете, когда можно перезаписать вышестоящий поток вашим локальным (вы можете затем принудительно нажать), а когда все не в порядке (вам нужновытащить).

И чтобы вернуться к исходному случаю, вы перебазировали свою ветку, поэтому она разошлась (по определению), так что если вы работаете в одиночку на ветке или если вы убедились, что никто ничего не толкал нав то же время, git push --force - это то, что вам нужно.

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