#git #merge #pull
#git #слияние #тянуть
Вопрос:
Я должен использовать разные компьютеры. Я обновил файл A, B и другие файлы в одном, а B, C и другие файлы в другом.
Обновления в файле B — это другая часть кода. Я зафиксировал оба. Я загрузил A и B на github.
Вопросы:
-
Теперь, что я должен делать в другом?
-
Должен ли я просто вытащить? Или я должен сначала нажать?
-
Если я нажму, будет ли перезаписан файл A?
-
Если я вытащу, будет ли перезаписан файл C?
-
Какой процесс мне нужно предпринять?
-
Что мне нужно сделать с файлом B, у которого другая версия? Могу ли я их объединить?
Ответ №1:
Вы должны сначала выполнить pull, чтобы ваши дополнения были поверх того, что есть на сервере. После того, как вы извлекли (что объединит ранее загруженные моды с вашими локальными модами), вы можете нажать. Кстати: это не github, это обычный git. Я предлагаю следующую книгу, чтобы понять, как работает git:
Комментарии:
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 в другом репозитории.
Надеюсь, это кое-что прояснило.
Приветствия!