В чем разница между git Revert, Checkout и Reset?



Я пытаюсь узнать, как восстановить или откатить файлы и проекты в предыдущее состояние, и не понимают разницы между git revert,checkout и reset. Почему существуют 3 разные команды для одной и той же цели, и когда кто-то должен выбрать один из них?

1003   6  

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

    Ничего не найдено.