2012-01-07 2 views
10

Я читал здесь и много искал, но не нашел ответа, так что есть способ переключаться между фиксациями, как вы делаете с ветвями. Скажем, у меня есть эти коммиты: a;b;c где c - это мой last commit, могу ли я вернуться к фиксации a? Или вы должны сделать git diff и изменить файлы вручную?Переключение Git между коммитами

+1

Ветвь _is_ a commit (с символическим именем, но все же совершает ошибку) – fge

+1

Возможный дубликат [Как переключить репозиторий git на конкретный коммит] (http://stackoverflow.com/questions/4940054/how -can-i-switch-my-git-repository-to-a-specific-commit) –

ответ

12

Просто введите git checkout a. Или, что более полезно, git checkout -b mybranch a, для оформления заказа a в качестве новой ветки mybranch.

Если вы хотите вернуться b и c, вы можете использовать git revert, или удалить их полностью из истории вашей текущей ветви, вы могли git rebase -i a и выбросить их.

Даже если вы собираетесь использовать git diff, вам не придется ничего делать вручную. Ознакомьтесь с git format-patch, git apply и git am, чтобы автоматизировать создание и применение исправлений.

+0

Итак, я думаю, что переключение между коммитами невозможно, только если вы создаете ветви и переключаетесь между ними? Я прав? – Uffo

+0

Или я могу сделать git revert b (который обозначает идентификатор фиксации) '? – Uffo

+1

Существует также 'git reset --hard'. – svick

3

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

git log 

разветвляются от предыдущей версии

git branch -f branchname rev 
+0

Это хорошо на всякий случай, если вы создали ветви, но не тогда, когда у вас есть только главная ветвь, и вы хотите переключиться между коммитами. Я думаю, – Uffo

+0

Вы можете заставить основную ветвь указать более старую ревизию. Использовать мастер как отруби – Shraddha

1

мерзавец использует определение commitish. мерзавец определяет commitish как:

commitish

Указывает имя принять или объект тегов. Команда, которая принимает аргумент commit-ish , в конечном итоге хочет работать с объектом commit, но автоматически объекты тегов заметок, которые указывают на фиксацию.

Это кажется немного неполным, так как ветви также часто рассматриваются как фиксация.

В принципе, вы можете проверить все, что имеет хэш-код sha-1.

Смежные вопросы