Вернуться к фиксации с помощью хэша SHA в Git? [дубликат]



этот вопрос уже есть ответ здесь:



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



сказать его ша хэш 56e05fced214c44a37759efa2dfc25a65d8ae98d. Тогда почему я не могу просто сделать что-то вроде:



git revert 56e05fced214c44a37759efa2dfc25a65d8ae98d
440   9  
git

9 ответов:

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

# Reset the index and working tree to the desired tree
# Ensure you have no uncommitted changes that you want to keep
git reset --hard 56e05fced

# Move the branch pointer back to the previous HEAD
git reset --soft HEAD@{1}

git commit -m "Revert to 56e05fced"

что git-revert does-это создание фиксации, которая отменяет изменения, внесенные в данную фиксацию, создавая фиксацию, которая является обратной (ну, обратной) данной фиксации. Поэтому

git revert <SHA-1>

должен и работает.

если вы хотите вернуться к указанному фиксации, и вы можете сделать это, потому что эта часть истории еще не была опубликована, вам нужно использовать git-reset, а не git-revert:

git reset --hard <SHA-1>

(обратите внимание, что --hard будет сделайте так, чтобы вы потеряли все незакрепленные изменения в рабочем каталоге).

Дополнительная Информация

кстати, возможно, это не очевидно, но везде, где документация говорит <commit> или <commit-ish> (или <object>), можно поставить SHA-1 идентификатор (полный или сокращенный) фиксации.

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

git checkout 56e05fced214c44a37759efa2dfc25a65d8ae98d

лучший способ отката к определенной ревизии является:

git reset --hard <commit-id>

затем:

git push <reponame> -f

если ваши изменения уже были перенесены в public, shared удаленный, и вы хотите вернуть все коммиты между HEAD и <sha-id>, затем вы можете передать диапазон фиксации в git revert,

git revert 56e05f..HEAD

и он вернет все коммиты между 56e05f и HEAD (исключая начальную точку диапазона,56e05f).

обновление:

этот ответ проще, чем мой ответ: как вернуть репозиторий Git к предыдущей фиксации?

оригинальный ответ

# Create a backup of master branch
git branch backup_master

# Point master to '56e05fce' and
# make working directory the same with '56e05fce'
git reset --hard 56e05fce

# Point master back to 'backup_master' and
# leave working directory the same with '56e05fce'.
git reset --soft backup_master

# Now working directory is the same '56e05fce' and
# master points to the original revision. Then we create a commit.
git commit -a -m "Revert to 56e05fce"

# Delete unused branch
git branch -d backup_master

две команды git reset --hard и git reset --soft магия здесь. Первый меняет рабочий каталог, но он также меняет и голову. Мы фиксируем голову на второй.

это более понятным:

git checkout 56e05fced -- .
git add .
git commit -m 'Revert to 56e05fced'

и чтобы доказать, что он работал:

git diff 56e05fced

должно быть так:

git reset --hard 56e05f

это вернет вас к этому конкретному моменту времени.

Это может сработать:

git checkout 56e05f
echo ref: refs/heads/master > .git/HEAD
git commit

Comments

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