Как бороться с merge / pull в git

#git #merge #pull

#git #слияние #тянуть

Вопрос:

Я должен использовать разные компьютеры. Я обновил файл A, B и другие файлы в одном, а B, C и другие файлы в другом.

Обновления в файле B — это другая часть кода. Я зафиксировал оба. Я загрузил A и B на github.

Вопросы:

  • Теперь, что я должен делать в другом?

  • Должен ли я просто вытащить? Или я должен сначала нажать?

  • Если я нажму, будет ли перезаписан файл A?

  • Если я вытащу, будет ли перезаписан файл C?

  • Какой процесс мне нужно предпринять?

  • Что мне нужно сделать с файлом B, у которого другая версия? Могу ли я их объединить?

Ответ №1:

Вы должны сначала выполнить pull, чтобы ваши дополнения были поверх того, что есть на сервере. После того, как вы извлекли (что объединит ранее загруженные моды с вашими локальными модами), вы можете нажать. Кстати: это не github, это обычный git. Я предлагаю следующую книгу, чтобы понять, как работает git:

http://book.git-scm.com/

Комментарии:

1. Просто хочу отметить, что push завершится неудачей, если вам нужно сначала выполнить pull.

Ответ №2:

Вытащить -> перебазировать -> нажать: http://learn.github.com/p/rebasing.html

Ответ №3:

Обычный сценарий заключается в том, что вы выполняете pull перед внесением изменений. Но может случиться так, что текущий предок ваших коммитов тот же, что и в прошлый раз (т. Е. Все остальные еще ничего не вставляли), что означает, что слияние не требуется, и вы можете просто вставлять свои изменения без необходимости вытаскивать.

Как только кто-то другой вставил свои изменения между ними, вам всегда приходится вставлять их изменения в свои (именно здесь git создает то, что называется фиксацией слияния, то есть фиксацией, которая не была создана обычным способом с помощью git add, git commit и т.д.). Теперь ваш репозиторий синхронизирован с последними изменениями, и вы можете безопасно синхронизировать центральный репозиторий со своим.

В этом случае вам придется сначала выполнить pull, что означает, что C не будет перезаписан, поскольку оба репозитория имеют одинаковую версию (помните, вы изменили только B в обоих репозиториях).

В случае B, где у вас есть две разные версии, которые должны быть объединены git, могут возникнуть конфликты. Но это именно то, что такое pull, это выборка (для синхронизации ваших репозиториев) и слияние между вашей локальной веткой, которая отслеживает удаленную ветку, например, master объединяется с origin / master.

И, наконец, то же самое произойдет с A, изменения, внесенные в первом репозитории в A, будут тривиальным слиянием в A в другом репозитории, поскольку измененный A модифицирован из той же версии (идентичных больших двоичных объектов) A в другом репозитории.

Надеюсь, это кое-что прояснило.

Приветствия!