В чем разница между git Revert, Checkout и Reset?
Я пытаюсь узнать, как восстановить или откатить файлы и проекты в предыдущее состояние, и не понимают разницы между git revert,checkout и reset. Почему существуют 3 разные команды для одной и той же цели, и когда кто-то должен выбрать один из них?
6 ответов:
эти три команды имеют совершенно разные цели. Они даже отдаленно не похожи.
git revertэта команда создает новый коммит, который отменяет изменения от предыдущей фиксации. Эта команда добавляет новую историю в проект (она не изменяет существующую историю).
git checkoutэта команда извлекает содержимое из репозитория и помещает его в рабочее дерево. Он также может иметь другие эффекты, в зависимости от того, как команда был вызван. Например, он также может изменить ветвь, над которой вы сейчас работаете. Эта команда не вносит никаких изменений в истории.
git resetэта команда немного сложнее. На самом деле он делает несколько разных вещей в зависимости от того, как он вызывается. Он изменяет индекс (так называемая "промежуточная область"). Или это изменения, на которые в настоящее время указывает глава филиала. Эта команда может изменить существующую историю (путем изменения совершить, что отраслевые ссылки).
С помощью этих команд
если фиксация была сделана где-то в истории проекта, и вы позже решите, что фиксация ошибочна и не должна была быть сделана, то
git revert- Это инструмент для работы. Он отменит изменения, внесенные плохой фиксацией, записывая "отменить" в истории.если вы изменили файл в вашем рабочем каталоге, но не совершил, то вы можете использовать
git checkoutдля оформления заказа свежая копия файла из репозитория.если вы сделали коммит, но не поделились им ни с кем другим, и вы решили, что не хотите этого, то вы можете использовать
git resetпереписать историю так, чтобы она выглядела так, как будто вы никогда не делали этого коммита.это лишь некоторые из возможных сценариев использования. Есть и другие команды, которые могут быть полезны в некоторых ситуациях, и вышеупомянутые три команды также имеют другие применения.
git revertиспользуется для отмены предыдущего коммита. В git вы не можете изменить или стереть более раннюю фиксацию. (На самом деле вы можете, но это может вызвать проблемы.) Поэтому вместо редактирования более ранней фиксации revert вводит новую фиксацию, которая отменяет более раннюю.git resetиспользуется для отмены изменений в вашем рабочем каталоге, которые еще не были совершены.git checkoutиспользуется для копирования файла из какой-либо другой фиксации текущего рабочего дерева. Это не автоматическая фиксация файла.
git checkoutизменяет ваше рабочее дерево,git resetизменяет ссылку на ветку, на которую вы указываете,git revertдобавляет фиксацию отмены изменений.
допустим, у вас были коммиты:
C B A
git revert B, создаст фиксацию, которая отменяет изменения вB.
git revert A, создаст фиксацию, которая отменяет изменения вA, но не будет касаться изменений вBобратите внимание, что если изменения в
Bзависят от изменений вA, вернуть вAне возможно.
git reset --soft A, изменит историю фиксации и репозиторий; промежуточный и рабочий каталог будет все еще быть в состоянииC.
git reset --mixed A, изменит историю фиксации, репозиторий и промежуточную версию; рабочий каталог по-прежнему будет находиться в состоянииC.
git reset --hard A, изменит историю фиксации, репозиторий, промежуточный и рабочий каталог; вы вернетесь в состояниеAполностью.
Если вы сломали дерево, но не совершал код, вы можете использовать
git reset, а если вы просто хотите восстановить один файл, вы можете использоватьgit checkout.Если вы сломали дерево и зафиксировали код, вы можете использовать
git revert HEAD.http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html
сброс - На уровне фиксации сброс-это способ переместить кончик ветви в другую фиксацию. Это можно использовать для удаления коммитов из текущей ветви.
Revert - Возвращаясь расстегивает совершить путем создания нового коммита. Это безопасный способ отменить изменения, так как у него нет шансов переписать историю фиксации. Сравните это с git reset, который изменяет существующую историю фиксации. По этой причине, ГИТ возврат должен быть использован, чтобы отменить изменения в общедоступной ветви и сброс git должны быть зарезервированы для отмены изменений в частной ветви.
вы можете посмотреть по этой ссылке- сброс, проверка и возврат
Comments