Файлы и папки Git любого проекта git могут совместно использоваться несколькими пользователями git, которые работают в команде. Когда несколько пользователей пытаются работать с одним и тем же файлом или папкой, возникает конфликт. Предположим, когда два пользователя работают с одним и тем же файлом репозитория, и если один пользователь изменяет файл после модификации, выполненной другим пользователем, то изменение, сделанное первым пользователем, будет потеряно при последнем обновлении. Эту проблему можно решить вручную. Пользователь должен выполнить команду git force pull для перезаписи изменений в локальном репозитории, не влияя на изменения, сделанные в локальном репозитории, которые не были отправлены. Команда `git pull` не может решить эту проблему. В этой статье показан способ использования git force pull с помощью команд git fetch и git reset.
GitHub Desktop помогает пользователю git графически выполнять задачи, связанные с git. Вы можете легко загрузить последнюю версию этого приложения для Ubuntu с github.com. Вы должны установить и настроить это приложение после загрузки, чтобы использовать его. Вы также можете проверить руководство по установке GitHub Desktop в Ubuntu, чтобы правильно узнать процесс установки.
Вам потребуется создать учетную запись GitHub, чтобы проверить команды, используемые в этой статье.
Вам необходимо создать локальный репозиторий и опубликовать репозиторий на удаленном сервере, чтобы протестировать команды, используемые в этой статье.
Команда `git fetch –all` загружает все содержимое удаленного репозитория в локальный репозиторий, но не объединяет содержимое с локальным репозиторием. Если после выполнения команды fetch команда `git reset` выполняется с параметром –hard, то все соответствующие файлы и папки локального репозитория будут перезаписаны содержимым удаленного репозитория. Все незафиксированные и подтвержденные локальные изменения, которые не были отправлены, будут удалены для параметра –hard. Эта проблема была описана в этой части статьи с использованием локального репозитория с именем python, опубликованного ранее на удаленном сервере.
Откройте файл basic.py из удаленного репозитория, чтобы проверить его содержимое. На следующем изображении показано, что файл содержит четыре строки сценария для сложения двух чисел.
Теперь откройте файл basic.py локального репозитория в любом текстовом редакторе и измените файл следующим образом. Сохраните файл и выйдите из редактора.
print («Сложение трех чисел») a = 10 b = 20 c = 30 print (a + b + c)
Выполните следующие команды, чтобы добавить измененный файл basic.py в локальный репозиторий и проверить статус репозитория.
$ git add basic.py $ git status
После выполнения команды появится следующий вывод. Вывод показывает, что задача еще не зафиксирована.
Выполните следующие команды, чтобы проверить содержимое файла basic.py перед извлечением содержимого удаленного репозитория и проверить содержимое файла basic.py после принудительного извлечения.
$ cat basic.py $ git fetch --all $ git reset --hard origin/main $ cat basic.py
Следующие выходные данные показывают, что содержимое файла basic.py было перезаписано содержимым файла basic.py удаленного сервера, а измененное содержимое было потеряно.
Снова откройте файл basic.py локального репозитория в любом текстовом редакторе и измените файл следующим образом. Сохраните файл и выйдите из редактора.
print(«Вычитание двух чисел») a = 50 b = 20 print(a - b)
Выполните следующие команды, чтобы добавить измененный файл basic.py в локальный репозиторий, зафиксировать задачу и проверить статус репозитория.
$ git add basic.py $ git commit -m "basic.py обновил статус" $ git
Следующий вывод показывает, что измененный файл basic.py добавлен и зафиксирован с сообщением о фиксации. Текущее рабочее дерево теперь чистое.
Выполните предыдущие команды еще раз, чтобы проверить, как команда `git reset` работает для зафиксированной задачи.
$ cat basic.py $ git fetch --all $ git reset --hard origin/main $ cat basic.py
Следующий вывод показывает, что содержимое удаленного файла снова перезаписало содержимое локального файла. Итак, команда `git reset` работает одинаково как для зафиксированных, так и для незафиксированных задач.
Проблему перезаписи можно решить, создав новую ветку. Зафиксируйте все изменения в репозитории перед запуском команд pull. Снова откройте файл basic.py локального репозитория в любом текстовом редакторе и измените файл следующим образом. Сохраните файл и выйдите из редактора.
print(«Умножить два числа») a = 10 b = 20 print(a * b)
Выполните следующие команды, чтобы проверить список веток, переключиться на новую ветку и проверить содержимое файла basic.py после выполнения команд pull.
$ git branch $ git checkout -b new-branch $ git fetch –all $ git reset --hard origin/main $ cat basic.py
Следующий вывод показывает, что содержимое файла basic.py было перезаписано для новой ветки.
Теперь выполните следующие команды, чтобы проверить содержимое файла basic.py после переключения на основную ветку.
$ git checkout main $ cat basic.py
Следующий вывод показывает, что содержимое файла basic.py не изменилось.
Проблема принудительного извлечения репозитория git и способы решения этой проблемы были объяснены в этой статье с использованием локального и удаленного демонстрационного репозитория. Но это решение не будет работать для незафиксированных изменений локального репозитория. Итак, вы должны зафиксировать все изменения или запустить команду `git stash` перед тем, как принудительно вытащить репозиторий git.