Что происходит, когда Дэн меняет текст на «aB», а Джон на «abc»? - PullRequest
3 голосов
/ 22 июня 2010

Представьте себе очень простой текстовый документ (text.txt) с содержимым только буквы «ab». Этот файл был зарегистрирован в каноническом (удаленном) хранилище. Два человека имеют локальное закрытие этого хранилища и, следовательно, этот файл и начинают его редактирование. Дэн меняет содержимое на «aB» (обратите внимание на заглавную B), а Джон редактирует свою версию на «abc». Дэн делает коммит и отправляет его в каноническое хранилище. Джон немного позже делает локальный коммит и передает изменения в удаленный. Что происходит (сообщение), когда Джон загружает свой репозиторий?

Ответы [ 3 ]

3 голосов
/ 22 июня 2010

Это зависит от того, какие флаги Джон использует, когда нажимает.

По умолчанию он не будет выдвигаться, потому что глава удаленной ветви (коммит Дана) не является предком ревизии Джона.

С -f или --force он просто перезапишет изменения Дэна с изменениями Джона, фактически отменив толчок Дэна - если сервер настроен, по крайней мере, на принудительные нажатия. Многие git-серверы просто отказываются это делать.

Как правило, «правильный» способ сделать это для Джона - попытаться толкнуть нормально. Он увидит ошибку, о которой я упоминаю, и узнает, что кто-то другой внес изменения. Затем он сделает git pull, чтобы получить изменения Дэна и объединить их со своими собственными. Функция извлечения попытается выполнить слияние, приведет к конфликту в вашем текстовом файле и оставит его для исправления Джона. После того как Джон разрешит конфликт (возможно, сделав файл, содержащий «aBc», а затем используя git add text.txt; git commit, чтобы сообщить git), его локальный репозиторий будет содержать «коммит слияния», который помечен как включающий оба изменения. Затем он может отправить это на сервер без дальнейших проблем.

1 голос
/ 22 июня 2010

Конфликта нет. Пушу Джона будет просто отказано, потому что коммит, который он пытается пушить, не является прямым потомком удаленной ветви.

Если Джон хочет, чтобы его коммит был передан, он должен сначала либо слить его с коммитом, который является главой удаленной ветви, либо сделать скидку на свой коммит поверх этого коммита. На этом этапе ему придется выбрать способ разрешения возникшего конфликта в текстовом файле.

0 голосов
/ 22 июня 2010

Будет конфликт слияния

...