Как разрешить конфликты Git

kak razreshit konflikty git

Примечание. Это шестое видео в серии Git для начинающих. Смотрите первое видео здесь.

Скажем, друг внес изменения в ваше хранилище и перенес изменения в пульт удаленного управления Git. В то же время вы также внесли изменения в ту же строку кода.

Когда вы перетащите их изменения в ваше локальное хранилище, вы заметите, что есть конфликт.

Это происходит потому, что Git не знает, является ли версия вашего друга обновленной или ваша версия обновлена.

Это то, что мы называем конфликтом Git.

Сегодня вы узнаете, как разрешить конфликт Git.

Сначала давайте создадим конфликт Git, чтобы вы увидели, что произойдет.

Создание конфликта

Чтобы создать конфликт Git, нам нужны два набора кода. Для первого набора нам необходим кто-то, чтобы ввести код в пульт дистанционного управления.

В нашем случае мы редактируем файлы на GitHub, чтобы имитировать изменения.

Скажем, мы изменяем текст в README.md от «Привет, мир, это мое первое репо Github» до «Привет, мир, это мое второе репо Github».

0*oqp8X9DU4fbyuWD0

Мы также собираемся сделать сообщение о фиксации, в котором будет написано «Изменено с первого на второй», чтобы увидеть последствия в нашей истории Git позже.

0*mqXHe049z2qbF5d_

Для второго набора кода вы можете изменить то же самое README.md файл в вашем локальном хранилище. Вместо «второго хранилища Github» мы скажем «третий репозиторий Github».

Hello world! This is my third Github repo!

Мы собираемся зафиксировать этот файл и установим уведомление о фиксации на «Изменить первый на третий».

0*CzA0oV7JicsnHfgM

Вы можете проверить наличие обновлений в клиенте Git с помощью кнопки «Выбрать». После завершения выбора вы можете это увидеть origin/master находится на другой вилке по сравнению с master.

Это происходит потому, что на пульте Git произошли изменения. и в нашем локальном хранилище одновременно.

0*Qa60g2Itzon51df_

Если вы посмотрите на ветку слева, вы увидите, что главная ветвь говорит одна вниз, одна вверх. Это говорит нам, что в пульте Git есть один комит. впереди нашего хозяина. В то же время наша главная ветвь имеет одну фиксацию впереди пульта.

0*1y5a6LCYSxr3XQJC

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

Это сообщение об ошибке может отличаться в зависимости от используемого клиента Git. В Fork написано «Объединение ветвей origin/master в master. Исправьте 1 конфликт, а затем продолжайте».

0*vBybWUmGNpYBu3Pt

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

Чтобы увидеть конфликт, вы можете вернуться в раздел изменений. Здесь вы увидите файлы, содержащие конфликты. В данном случае это README.md файл.

0*8nF6u__JbIqsDWET

Сначала поговорим о том, почему нужно объединиться.

Зачем сливаться?

Когда вы перетаскиваете изменения из удаленной ветви в локальную, изменения из удаленной ветви объединяются в локальную ветвь.

Git помогает нам выполнять слияния автоматически, если он знает, что было изменено сначала, а что позже, и нет двусмысленности.

Но когда возникает конфликт, Git не знает, какая версия верна, поэтому вам придется объединить код самостоятельно.

Разрешение конфликтов

Самый простой способ разрешить конфликт – изменить файл на компьютере. Если вы откроете README.md теперь вы увидите строки, говорящие об этом:

<<<<<< HEAD Hello world! This is my third Github repo!====== Hello world! This is my second Github repo! >>>&gt;>> snt2h1s3n4tnthd9au8d3324

Код между <<<;<<; HEAD и ======= это код в нашем локальном репозитории (наш код).

Код между ====== и >&gt;>>>> – это код удаленного хранилища (их код).

Эти две строчки кода конфликтуют. Нам нужно выбрать между «вторым репо Github» или «третьим репо Github».

Чтобы устранить конфликт, выберите правильную строку кода. Затем вы удаляете все остальное.

В этом случае, предположим, что третья является правильной версией. Все, что вы сделаете, это удалить все остальное, что неправильно.

Hello world! This is my third Github repo!

Совершение слияния

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

Если изменения отличаются, вам нужно будет передавать файлы.

После установки необходимо зафиксировать слияние.

Если вы посмотрите на область сообщения о фиксации, вы увидите, что Fork автоматически заполнил сообщение о фиксации. Вы можете использовать сообщения фиксации напрямую.

Нажмите commit, чтобы зафиксировать изменения.

0*JW97OfT-V7rVz4PO

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

Если вы посмотрите на историю Git, вы увидите, что удаленная ветвь master имеет ссылку на локальную главную ветвь. Это показывает слияние.

0*kUh2pvk7Xmi7nxzi

Далее нужно внести изменения в пульт Git.

0*RmOpKdzZHmVQ4YC9

И это есть как вы разрешаете конфликт Git.

Предотвращение возникновения конфликтов

Конфликты возникают, когда над одним файлом одновременно работают два или более человека.

Есть два способа предотвращения конфликтов.

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

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

Второй способ включает ветви. Здесь разные люди работают над кодом в разных отраслях. Они не взаимодействуют друг с другом. Они объединяют код в главную ветвь только тогда, когда будут готовы.

Ответвления несколько более развиты. О ветвях и как пользоваться ветвями мы поговорим в следующем видео.

Спасибо, что прочли. Помогла ли вам эта статья однажды? Если вы сделали, надеюсь, вы поделитесь этим. Вы можете помочь кому-то. Спасибо!

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *