Git тянуть против Git Версия с ребазой - PullRequest
0 голосов
/ 26 февраля 2020

Обычно это я, как я sh мой код для слияния с мастером

Метод 1:

git pull origin master
git add -A
git commit -m 'message'
git push

Позже найденный pull не является правильным способом иметь линейную историю, Я должен был перебазировать, а затем pu sh

Что я сейчас делаю

Метод 2:

git checkout LocalBranch
git rebase master[resolve conflicts]
git add -A
git commit -m 'message'
git push

ВЫПУСК:

Когда Я делаю вещи, используя метод 1, он говорит, что уже обновлен с мастером. Если я go с методом 2, это вызывает много конфликтов, и после разрешения я не могу набрать sh код.

Вопрос:

  1. Почему git pull master(5abc) и git rebase master(4def) указывают на разные версии головы мастера.
  2. git pull и git rebase не получат ту же версию мастера в любое время?

Ответы [ 2 ]

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

Я думаю, вам нужно разобраться с работой git pull. Извлечение с пульта , т. Е. расположения кода (может быть GitHub, GitLab, BitBucket и т. Д. c.) Вызывает от git до git fetch и git merge. Ну, что это значит?

Это означает, что сначала извлекает разницу между вашим кодом и кодом пульта (например, скажем, есть два "дополнительных" коммита на пульте), затем пытается объединить эти различия в вашу кодовую базу. Теперь, это может go плавно в случае, если эти 2 коммита не связаны с коммитами, которые вы сделали в своем коде (скажем, создание нового файла (ов)). Но, если есть случай изменения в той же части кода, скажем, ваш код был:

int a = 4;
bool x = false;

Но объединение хочет сделать это:

int a = 5;
bool x = false;

Это создает конфликт слияния, потому что ваш код говорит, что a равно 4, а слияние говорит, что это 5, какой из них git следует рассмотреть? Следовательно, вы получаете подсказку merge conflict при извлечении кодов. Вам нужно решить их вручную, чтобы все заработало.

git rebase master поможет вам повторно применить ваши коммиты в LocalBranch к мастеру. Это означает, что оно берет ваше рабочее дерево и пытается объединить его с основным рабочим деревом. См. this для подробного анализа этого процесса. Перебазировка будет означать, что все, что совершит , который вы сделали, все они будут применены поверх мастера (или, может быть, даже между ними, если хотите;)). Пожалуйста, посмотрите это видео, чтобы получить лучшее представление. Поскольку этот процесс является пошаговым, он помещает вас в другой коммит (тот, который должен был быть перебазирован первым).

git pull (в частности, шаг merge) «Разница» фиксирует и попытается merge внести это в ваше главное дерево работы. Только после завершения этого процесса вы можете сделать add и commit и, наконец, push

Также, совет, который я хотел бы дать, используйте интерактивный ребаз , то есть git rebase -i, чтобы сделать перебазирование, поскольку он предоставляет вам интерактивный интерфейс, чтобы помочь вам перебазировать.

Не стесняйтесь комментировать, если есть еще какая-то путаница! :)

Best

PS: вы можете сделать принудительное усилие pu sh в случае, если rebase будет в состоянии выполнить pu sh изменения на пульт.

0 голосов
/ 26 февраля 2020

Правильная альтернатива для вашего метода 1 для линейной истории:

git add -A
git commit -m message
git fetch origin
git rebase origin/master [resolve conflicts]
git push 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...