Git Легкая перебазировка? - PullRequest
0 голосов
/ 19 марта 2020

Мне недавно пришлось переключиться на git с Mercurial, и мой обычный рабочий процесс стал невероятно раздражающим для репликации, поэтому я ищу некоторые указатели. Рад ответить на все, что я скучаю здесь. Но мне нравится делать следующее:

  1. На мастере потяните, чтобы получить все последние изменения.
  2. создать свою рабочую ветвь вне мастера.
  3. Работать по сути, просто измените все в моем первом коммите.
  4. pu sh изменение для проверки.
  5. Решите вопросы, снова внесите изменения, а затем повторно введите pu sh
  6. Если я каким-то образом отстаю от основной ветки, я обычно просто вытягиваю все изменения в основную, чтобы моя ветка просто сидела поверх них, чтобы избежать конфликтов слияния до посадки.
  7. land.

Мой вопрос:

Итак, я отказался от своих постоянных поправок из-за хорошей структуры gits. Так что теперь после любых комментариев я делаю новый коммит. Настоящая проблема возникает, когда я отстаю от хозяина. Я обычно фиксирую свои изменения. Go освоить. git тянуть. Вернитесь в мою ветку git rebase master и попробуйте повторно повторить sh мои изменения. По какой-то причине это всегда нарушает следующее: «Моя ветвь находится за ее удаленным аналогом». Что мне здесь не хватает?

Спасибо

1 Ответ

3 голосов
/ 19 марта 2020

Примечание: hg pull == git fetchне git pull, что было бы сопоставимо с hg pull -u).

Сообщение об ошибке, которое вы видите о вашей отставание ветви, скорее всего, вызвано чем-то, что известно как non-fast-forward merge / pu sh. Когда вы перебазируете, вы измените существующую историю. Если вы уже выдвинули свою старую версию истории, то она отличается от вашей локальной версии и, таким образом, git говорит вам, что она не может сделать вашу ветку sh, потому что это изменит историю. У вас есть два варианта: 1. объединить (не то, что вы хотите в этом случае) 2. принудительно pu sh

Также прочитайте Git pu sh отклонено "без ускоренной перемотки вперед ", которая предоставляет решение именно для этой проблемы.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: никогда не заставляйте историю sh принудительно использовать общие ветви, если вы действительно не знаете, что делаете. Принуждение разрушает существующую историю, и если старая история уже использовалась кем-то другим, вас ждут неприятные сюрпризы в будущем.

При этом решение в основном сводится к:

git fetch
git rebase origin/master
git push origin +your_branch:your_branch
...