Перейти к содержимому

Git fetch как отменить

  • автор:

Как отменить (откатить) действие git pull?

Подскажите, пожалуйста, решение проблемы: Есть две ветки: sphere и tags . Я находился в ветке sphere и случайно сделал git pull origin tags , потом, заметив, что написал неправильно, и не посмотрев, что мердж прошел с конфликтами, сделал git pull origin sphere , и у меня в ветку влились все новые изменения из sphere . Как мне вернуть код к состоянию до первого pull ?

Отслеживать

34k 25 25 золотых знаков 130 130 серебряных знаков 222 222 бронзовых знака

задан 16 сен 2014 в 13:24

7,951 2 2 золотых знака 22 22 серебряных знака 35 35 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

git reset --hard git checkout sphere git reflog # Находите хэш коммита, в котором вы находились до первого pull-а. # Будет что-то вроде "8f05e00 HEAD@: checkout: moving from master to sphere" # или "4c31200 HEAD@: commit: Awesome feature implemented." git reset --hard [нужный хэш] 

Ну и я бы не рекомендовал использовать «git pull» вообще, потому как эта команда берет на себя слишком много функций и ее поведение неочевидно. Рекомендую разобраться поподробнее, как работает git, и использовать fetch + merge или fetch + rebase. Я лично предпочитаю второе, но это дело вкуса.

Отмена изменений

Если вы хотите отменить изменения в репозитории Git, сначала определите, какой тип изменений вы хотите отменить. Например, можно сделать следующее:

  • Отмените незафиксированные изменения в файле, вернув файл к последней зафиксированной версии. Вы также можете отменить изменения файл в любую зафиксированную версию.
  • Возврат ветви к предыдущему состоянию путем сброса ее до предыдущей фиксации.
  • Отмените изменения, внесенные общей фиксацией, создав новую фиксацию, которая отменяет изменения. Так как этот подход не перезаписывает существующий журнал фиксаций, он подходит для отмены изменений, внесенных фиксациями, которые были отправлены и используются другими пользователями.
  • Измените последнюю фиксацию, чтобы изменить ее содержимое или сообщение. Дополнительные сведения см. в статье Обновление последней фиксации.
  • Устраните проблему, возникшую в предыдущей фиксации, создав новую фиксацию , которая включает исправление. Дополнительные сведения см. в статье Создание фиксации.

В этой статье раскрываются следующие темы:

  • Отмена незафиксированных изменений в файле
  • Возврат ветви к предыдущему состоянию
  • Отмена изменений, внесенных общей фиксацией

Отмена незафиксированных изменений в файле

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

Git checkout также может отменить изменения файл в любую зафиксированную версию при указании ИД фиксации.

Если есть вероятность, что вы захотите повторно применить изменения, которые Git checkout отменит, рассмотрите возможность их спрягать .

  • Visual Studio 2022
  • Visual Studio 2019 — меню Git
  • Visual Studio 2019 — командная Обозреватель
  • Командная строка Git

Visual Studio 2022 предоставляет возможности управления версиями Git с помощью меню Git, изменений Git и контекстных меню в Обозреватель решений. Visual Studio 2019 версии 16.8 также предлагает пользовательский интерфейс Git для команды Обозреватель. Дополнительные сведения см. на вкладке Visual Studio 2019 — team Обозреватель.

Visual Studio поддерживает отмену незафиксированных изменений в файле путем восстановления файла до последней зафиксированной версии.

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

Снимок экрана: параметры контекстного меню для промежуточных файлов в Visual Studio.

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

Снимок экрана: параметры контекстного меню для измененных файлов в Visual Studio.

Visual Studio 2019 предоставляет возможности управления версиями Git с помощью меню Git, изменений Git и контекстных меню в Обозреватель решений.

Visual Studio поддерживает отмену незафиксированных изменений в файле путем восстановления файла до последней зафиксированной версии.

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

Снимок экрана: параметры контекстного меню для промежуточных файлов в Visual Studio.

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

Снимок экрана: параметры контекстного меню для измененных файлов в Visual Studio.

Visual Studio поддерживает отмену незафиксированных изменений в файле путем восстановления файла до последней зафиксированной версии.

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

Снимок экрана: параметры контекстного меню для промежуточных файлов в Team Обозреватель в Visual Studio 2019.

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

Снимок экрана: параметры контекстного меню для измененных файлов в team Обозреватель в Visual Studio 2019.

С помощью команды Git checkout можно отменить незафиксированные изменения в файле, вернув файл к последней зафиксированной версии:

git checkout

Например, git checkout README.md отменяет незафиксированные изменения в README.md файле.

Git checkout также поддерживает возврат файла к ранее зафиксированной версии при указании частичной или полной ИД фиксации, которая однозначно идентифицирует фиксацию:

git checkout

Дополнительные сведения о поиске ИД фиксации см. в разделе Поиск ИД фиксации.

Использование команды Git checkout для отменить изменения файла отличается от обычного использования, которое заключается в переключении между ветвями. В checkout выходных данных команды показано, выполняется ли переключение между ветвями или обновление файла, и выводится предупреждение, если неясно, какую из них вы пытаетесь сделать.

Возврат ветви к предыдущему состоянию

Вы можете отменить изменения ветвь в предыдущее состояние с помощью сброса Git для сброса ветви до предыдущей фиксации. Git reset влияет на все файлы во всех папках ветви.

В Git reset есть несколько вариантов. Параметр по умолчанию — отменить изменения ветвь к предыдущей фиксации, но сохранить все последующие изменения как незафиксированные изменения. Другой вариант — отменить изменения ветвь к предыдущей фиксации путем отмены всех изменений во всех файлах ветвей с момента фиксации.

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

  • Visual Studio 2022
  • Visual Studio 2019 — меню Git
  • Visual Studio 2019 — командная Обозреватель
  • Командная строка Git
  1. В строке меню выберите Git View Branch History (Просмотреть журнал ветви Git>), чтобы открыть вкладку Журнал для текущей ветви. Снимок экрана: параметр
  2. На вкладке Журнал для текущей ветви щелкните правой кнопкой мыши фиксацию, которую вы хотите сбросить, а затем выберите Сбросить > Удалить изменения (-hard), чтобы сбросить ветвь к выбранной фиксации и удалить все изменения во всех файлах ветви с момента фиксации. Или нажмите кнопку Сбросить > сохранить изменения (—mixed), чтобы сбросить ветвь к выбранной фиксации и сохранить все последующие изменения как незамеченные изменения. Снимок экрана: параметр
  1. В строке меню выберите Git View Branch History (Просмотреть журнал ветви Git>), чтобы открыть вкладку Журнал для текущей ветви. Снимок экрана: параметр
  2. На вкладке Журнал для текущей ветви щелкните правой кнопкой мыши фиксацию, которую вы хотите сбросить, а затем выберите Сбросить > Удалить изменения (-hard), чтобы сбросить ветвь к выбранной фиксации и удалить все изменения во всех файлах ветви с момента фиксации. Или нажмите кнопку Сбросить > сохранить изменения (—mixed), чтобы сбросить ветвь к выбранной фиксации и сохранить все последующие изменения как незамеченные изменения. Снимок экрана: параметр
  1. В представлении ИзмененияОбозреватель команды выберите Действия > Просмотр журнала, чтобы открыть вкладку Журнал для текущей ветви. Снимок экрана: параметр
  2. На вкладке Журнал для текущей ветви щелкните правой кнопкой мыши фиксацию, которую вы хотите сбросить, а затем выберите Сбросить > Удалить изменения (-hard), чтобы сбросить ветвь к выбранной фиксации и удалить все изменения во всех файлах ветви с момента фиксации. Или нажмите кнопку Сбросить > сохранить изменения (—mixed), чтобы сбросить ветвь к выбранной фиксации и сохранить все последующие изменения как незамеченные изменения. Снимок экрана: параметр

С помощью Git reset можно отменить изменения ветвь в ее состояние в предыдущей фиксации. Команду Git reset можно использовать с различными флагами:

  • Флаг —hard указывает Git, что нужно сбросить ветвь до указанной фиксации и отменить все последующие изменения. Будьте осторожны с этим параметром, так как вы можете потерять работу с ним.
  • Флаг —mixed указывает Git, что нужно сбросить ветвь до указанной фиксации, но сохранить все последующие изменения как незамеченные изменения. Этот параметр выбирается по умолчанию.
  • Флаг —soft предписывает Git сбросить ветвь до указанной фиксации, но сохранить все последующие изменения как промежуточные и незамеченные изменения в соответствии с их предыдущим состоянием.

Git reset часто используется с —hard возможностью отмены всех незафиксированных изменений во всех файлах с момента последней фиксации:

git reset --hard 

Чтобы сбросить ветвь к фиксации, отличной от последней фиксации, укажите ИД фиксации или частичную ИД фиксации, которая однозначно идентифицирует фиксацию:

git reset --hard

Дополнительные сведения о поиске ИД фиксации см. в разделе Поиск ИД фиксации.

Отмена изменений, внесенных общей фиксацией

Вы можете отменить изменения, внесенные фиксацией, с помощью отменить изменения Git, чтобы создать новую фиксацию, которая отменяет эти изменения. Git revert не удаляет исходную фиксацию. Этот подход подходит для отмены изменений, внесенных общей фиксацией, так как Git revert не изменяет предыдущий журнал фиксаций, поэтому журналы локальных и удаленных ветвей продолжают совпадать.

  • Visual Studio 2022
  • Visual Studio 2019 — меню Git
  • Visual Studio 2019 — командная Обозреватель
  • Командная строка Git
  1. В строке меню выберите Git View Branch History (Просмотреть журнал ветви Git>), чтобы открыть вкладку Журнал для текущей ветви. Снимок экрана: параметр
  2. На вкладке Журнал для текущей ветви щелкните правой кнопкой мыши фиксацию, которую вы хотите отменить изменения, и выберите Вернуть, чтобы создать новую фиксацию, которая отменяет изменения, внесенные выбранной фиксацией. Снимок экрана: параметр
  1. В строке меню выберите Git View Branch History (Просмотреть журнал ветви Git>), чтобы открыть вкладку Журнал для текущей ветви. Снимок экрана: параметр
  2. На вкладке Журнал для текущей ветви щелкните правой кнопкой мыши фиксацию, которую вы хотите отменить изменения, и выберите Вернуть, чтобы создать новую фиксацию, которая отменяет изменения, внесенные выбранной фиксацией. Снимок экрана: параметр
  1. В представлении ИзмененияОбозреватель команды выберите Действия > Просмотр журнала, чтобы открыть вкладку Журнал для текущей ветви. Снимок экрана: параметр
  2. На вкладке Журнал для текущей ветви щелкните правой кнопкой мыши фиксацию, которую вы хотите отменить изменения, и выберите Вернуть, чтобы создать новую фиксацию, которая отменяет изменения, внесенные выбранной фиксацией. Снимок экрана: параметр

С помощью команды Git revert можно отменить изменения, внесенные фиксацией, и создать новую фиксацию с обратными изменениями. Фиксация, изменения которой были отменены, остается в журнале Git.

git revert

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

Git уведомит вас о конфликтах во время операции отменить изменения. Можно либо разрешить конфликты, а затем запустить git revert —continue , либо выполнить команду git revert —abort , чтобы отменить операцию отменить изменения.

Поиск ИД фиксации

Для получения идентификатора фиксации можно использовать команду Git log . Флаг —oneline сокращает выходные данные.

git log --oneline

Команда Git log сначала перечисляет последние фиксации, начиная с фиксации на кончике указанной ветви (текущая ветвь, если она не указана), а затем выполняет итерацию назад по фиксациям предков. Каждая ИД фиксации в сокращенных выходных данных является частичной контрольной суммой SHA-1, которая однозначно идентифицирует фиксацию. Например, git log —oneline main может вывести:

e745d06 (HEAD -> main) Add a test initialization class 31da50b Add network switch test 0c14391 Add readme file 32e3946 Add project files. 

Дальнейшие действия

Похожие статьи

  • Не знакомы с репозиториями Git? Подробнее
  • Сохранение работы с фиксациями

Как отменить pull?

Добрый вечер. Подскажите пожалуйста. Находясь в ветке master сделал git pull origin task1234
Как отменить изменения, которые сделал это пул?

  • Вопрос задан более трёх лет назад
  • 47373 просмотра

Комментировать

Решения вопроса 2

По определению git pull это git fetch + git merge
Отмена через git reset —hard на предыдущее состояние.

Ответ написан более трёх лет назад

Комментировать

Нравится 8 Комментировать

Команда git fetch — чем отличается от git pull

Для чего нужна команда git fetch, как работает и чем отличается git pull от git fetch.

Эта инструкция — часть курса «Введение в Git».

Смотреть весь курс

Введение

В этой инструкции мы расскажем, для чего нужна команда git fetch, как работает и чем отличается git pull от git fetch.

Git fetch, что делает данная команда

Git fetch — команда в распределенной системе контроля версий Git, которая используется для скачивания изменений из удаленного или локального репозитория в свой локальный репозиторий.

git fetch [] [ | ]

Польза git fetch в том, что эта команда привносит актуальность локальному репозиторию без изменения его дерева или текущей ветки. Таким образом, следить за изменениями, сделанными другими участниками, становится проще, быстрее можно начать работу с этими изменениями.

Что произойдет при выполнении команды git fetch

Данная команда извлекает все новые объекты из удаленного репозитория и хранит их в локальном репозитории, обновляя ветки, теги и другие метаданные локального репозитория. Таким образом, отражается состояние удаленного репозитория.

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

Перейти к списку удаленных веток, которые были обновлены во время операции git fetch:

git branch -r

Сравнить свою локальную ветку с обновленной удаленной веткой и увидеть различия:

git diff

Просмотреть историю коммитов обновленной удаленной ветки и понять, какими были внесенные изменения:

git log

Переключиться на обновленную удаленную ветку и начать работать с внедренными изменениями:

git checkout

Включить изменения из удаленного репозитория в локальную копию проекта путем слияния. Считается самым частым действием после операции git fetch:

git merge

Наложить локальные коммиты поверх обновленной удаленной ветки. Такой вариант должен использоваться с осторожностью, так как в результате может привести к конфликтам, если удаленная ветка сильно изменилась:

git rebase 

Важно помнить, что git fetch только обновляет удаленные ссылки и ветки, но не производит слияния с локальной веткой. Для внедрения изменений используется одна из двух последних приведенных в пример команд.

Разница между git pull и git fetch

Cуществуют четыре команды, которые скачивают код из удаленного репозитория: git clone, git remote update, git fetch, git pull. Последние 3 команды очень похожи друг на друга.

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

Между git remote update и git fetch отличие лишь в том, что первая из этих команд обновляет все удаленные подключения, а git fetch — только один репозиторий или группу репозиториев. Но есть опция, нивелирующая разницу между этими командами. Мы рассмотрим ее ниже в параграфе про опции.

Git pull — связка последующих команд git fetch и git merge.

git pull [] []

Такой способ ускоряет внедрение новых изменений в локальный репозиторий, но и является менее управляемым. Git pull следует применять, если у вас нет цели посмотреть изменения перед слиянием или вы не хотите медлить перед интеграцией изменений в локальную ветку.

К git pull применяются опции как от git fetch, так и от git merge. Если же вы хотите произвести rebase вместо merge, то используйте соответствующую опцию:

git pull --rebase []

Полезные опции и настройки для команды git fetch

Настройки

Все настройки выполняются в .git/config, либо командой git config —edit.

Чтобы использовать git fetch, разработчик должен настроить подключение к удаленному репозиторию. Это можно сделать командой git remote, которая позволяет добавлять, удалять и управлять удаленными репозиториями. Когда удаленный репозиторий будет готов, команда git fetch может быть использована для получения последних изменений из удаленного репозитория.

Если необходимо обновить только одну ветку, например, master, не задействуя остальные доступные ветки в удаленном репозитории, то можно внести следующую настройку в конфигурации удаленного подключения к этому репозиторию:

[remote “origin] fetch = +refs/heads/master:refs/remotes/origin/master

Или просто введя в консоль:

git fetch origin master

После набора git fetch с названием репозитория данная настройка будет вызываться по умолчанию. Если же такая настройка необходима однократно, то при наборе команды можно сразу указать соответствие веток. Итак, для получения данных, например, из ветки super-branch удаленного репозитория в локальную origin/super-branch, прописывается такая команда:

git fetch origin master:refs/remotes/origin/super-branch

Команда выполнится для ветки super-branch локального репозитория, получив данные из удаленного репозитория.

Если нужен не один репозиторий, а несколько, то группа репозиториев настраивается через remotes. следующим образом:

[remotes] group1 = first-remote second-remote commit group2 = only-one-remote

Есть возможность включить автоматическую подписку на теги во время git fetch. То есть Git будет скачивать все новые теги из удаленного репозитория и создавать локальные теги, которые будут указывать на те же коммиты, как и в удаленном репозитории. Можно включить эту опцию глобально, добавив —global к команде git config —edit:

tags = true

Опции

Есть ряд опций, доступных с командой git fetch, которые позволяют разработчикам указать точные изменения. Например, можно использовать опцию —prune, чтобы удалить отслеживаемые ветки, которые больше не существуют в удаленном репозитории. Это помогает содержать локальный репозиторий в чистоте и уменьшает беспорядок в списке веток.

git fetch --prune 

Другая опция —all, которая позволяет разработчикам получить изменения со всех настроенных удаленных репозиториев в локальный репозиторий. Она может быть полезна в ситуациях, когда в проекте есть несколько репозиториев и разработчикам нужно подхватывать изменения из них всех. Получается аналог команды git remote update.

git fetch --all

Следующая опция продемонстрирует работу git fetch без дальнейшего обновления каких-либо локальных веток. Это может быть полезно для теста и просмотра изменений, которые будут получены в результате выполнения git fetch:

git fetch --dry-run

Пример: git fetch origin

Пусть у нас будет настроен удаленный репозиторий на GitHub (на GitLab будет тоже самое), который мы назвали локально «origin». На нем существуют ветки master и feature-branch.

Для начала перейдем к локальному репозиторию, который планируем обновить:

cd ~/my-best-project

Затем используем git fetch, чтобы получить последние изменения из удаленного репозитория:

git fetch origin

После того как операция git fetch завершится, можно проверить обновленные удаленные ветки:

git branch -r > origin/master > origin/feature-branch

Теперь сравним локальную ветку с обновленной удаленной веткой, чтобы увидеть различия:

git diff origin/master

Также можно посмотреть историю коммитов обновленной удаленной ветки:

git log origin/master

Переключимся на обновленную удаленную ветку:

git checkout origin/master

Cольем изменения из обновленной удаленной ветки в нашу локальную ветку:

git merge origin/master

Выбор дальнейших команд после выполнения команды git fetch зависят от специфики использования данной команды и структуры репозитория.

Заключение

  • Ветки с удаленным отслеживанием: git fetch работает с ветками с удаленным отслеживанием, которые являются ссылками на состояние удаленных веток в локальном репозитории.
  • Сетевое взаимодействие: git fetch взаимодействует с удаленным репозиторием по протоколу Git и получает информацию об удаленных ветках и их последнем состоянии. Эта информация хранится в локальном репозитории в виде веток удаленного отслеживания.
  • Получение изменений: команда git fetch извлекает информацию о последних изменениях, внесенных в удаленный репозиторий, и соответствующим образом обновляет ветки удаленного отслеживания. Сюда входят последние хэши коммитов, имена веток и сообщения коммитов.
  • Слияние изменений: после того, как git fetch извлечет изменения из удаленного репозитория, можно использовать команду git merge или git rebase, чтобы объединить изменения с локальной веткой.
  • Опции git fetch: можно использовать различные опции команды git fetch для управления ее поведением. Например, указать другой удаленный репозиторий, ограничить количество веток или даже удалить ветки, которые были удалены из удаленного репозитория.

Команда git remote add origin для работы с удаленными репозиториями

Зарегистрируйтесь в панели управления

И уже через пару минут сможете арендовать сервер, развернуть базы данных или обеспечить быструю доставку контента.

Читайте также:

Инструкция

Как создать веб-приложение на базе Telegram Mini Apps

Инструкция

Что делает команда chmod и как ее использовать в Linux

Инструкция

Как разработать gRCP-сервис на Go

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

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