В качестве программного обеспечения для контроля версий Git позволяет предсказуемо легко откатить изменения. Но даже концепция отмены изменения сложнее, чем вы думаете. Репозиторий Git — это не совсем то же самое, что набор файлов, над которыми вы работаете локально. Чтобы отменить изменения, нужно подумать, где именно вы хотите их отменить.
git checkout git reset и git восстановить — это команды, которые могут помочь вам вернуться к предыдущей версии не только вашей кодовой базы, но и отдельных файлов. Узнайте подробности этих команд, и вы сразу же начнете прыгать по истории файлов, как эксперт.
Содержание статьи
В любом случае, что означает сброс файла?
Важно отметить, что сброс файла может означать разные вещи для разных людей в разных обстоятельствах. Кроме того, команда git reset может не соответствовать вашим ожиданиям относительно того, что означает сброс.
Иногда вам нужно отменить локальные изменения, чтобы файл снова синхронизировался с текущим репозиторием. В других случаях вам может потребоваться откатить изменения, которые вы уже зафиксировали в репозитории.
Следующие термины являются ключевыми для понимания разницы: рабочее дерево, промежуточная область и репозиторий. Файлы, которые вы редактируете локально, принадлежат рабочему дереву. Файлы, которые вы фиксируете, в конечном итоге попадают в репозиторий. Когда вы собираете изменения, вы размещаете файлы. В каждом из этих расположений файл может иметь разное содержимое.
Вы можете рассматривать сброс файла как отмену изменений. Но состояние вашего файла будет определять, какие изменения вы на самом деле отменяете. Очевидный случай — когда вы вносите некоторые изменения, фиксируете их, а затем решаете, что они вам больше не нужны.
Другой случай может заключаться в том, что вы разместили файл и теперь хотите отключить его.
Как мне откатить ранее зафиксированный файл?
Давайте рассмотрим случай, который легче понять: вы зафиксировали файл и теперь хотите отменить изменения в нем.
Команда Git для этого несколько не интуитивно называется checkout . Возможно, вы использовали checkout раньше для переключения ветвей, но это небольшая часть того, что может делать команда. Это также позволяет вам обновлять файлы в вашем рабочем дереве, чтобы они соответствовали им в любой момент истории репозитория. Вы можете сделать это для определенного тега, ветки или даже для конкретной фиксации.
Наиболее полезная универсальная форма этой команды:
git checkout [commit ID] - путь / к / файлу
Здесь мы передаем определенный путь ( путь / к / файлу ), который идентифицирует только один файл. Мы также указываем идентификатор фиксации, чтобы получить файл в том виде, в котором он существовал в этой конкретной фиксации. Эта команда обновит файл только в нашем рабочем дереве.
]
Обратите внимание, что извлечение более ранней версии файла изменяет рабочую копию без фиксации или даже промежуточной обработки. Чтобы полностью завершить отмену в репозитории, вам необходимо подготовить файл и создать новую фиксацию.
Как мне изменить то, что я ставлю?
Другой тип отмены касается вашей промежуточной области. Он содержит изменения, которые вы будете фиксировать рядом с репозиторием. Если вы подготовили версию файла, а затем решили, что не хотите включать ее в следующую фиксацию, сначала нужно отключить ее.
Вы можете использовать команду git reset чтобы отключить постановку файла:
git reset путь HEAD / к / файлу
]
Могу ли я быстро отменить локальные изменения?
Да, вы можете отменить изменения в локальном файле до его постановки. Используйте следующую команду:
git checkout - путь / к / файлу
Обратите внимание, что это похоже на откат изменения репозитория, здесь просто опускается идентификатор фиксации. Как только вы выполните эту команду, Git отменит все изменения в вашей рабочей копии.
Что насчет git restore?
В более поздних версиях Git есть новая команда: restore . Для простых случаев, которые мы здесь обсуждали, вы можете использовать следующие эквиваленты. Чтобы отменить изменение в репозитории:
git restore --source [commit id] путь / к / файлу
Чтобы отключить демонстрацию файла, используйте:
git restore --staged путь / к / файлу
И для отмены изменений рабочей копии:
git восстановить путь / в / файл
Освоение возможностей управления версиями Git бесценно
Хотя сброс файла может показаться обычным делом, на практике вы обнаружите, что это происходит довольно редко. Скорее всего, вы откатите все коммиты, а не отдельные файлы. Однако в тех случаях, когда вам это нужно, Git, по крайней мере, делает это довольно простым.
Читать далее
Об авторе