Так что мой вопрос: что мне делать, если я наберу git-revert 145bb80, будут ли все мои файлы такими же, как они были изначально на этой фиксации: 145bb80?
Хороший вопрос, а ответа нет. Я предполагаю, что вы пришли с земли Subversion (как и я), а revert означало что-то другое - это было действие на вашей рабочей копии, а не на репозиторий. В Git land git revert
предназначен для изменения изменений одного фиксации, а не для восстановления всего дерева в конкретном состоянии.
Команда, которую вы ищете, это git reset
. Хотя существуют некоторые формы, предназначенные для рабочего дерева и индекса. Существует несколько различных форм. Если вы хотите сделать это так, чтобы ваш филиал указывал на 145bb80
, тогда вы запустили бы git reset --hard 145bb80
на этой ветке. В результате произойдут две вещи:
1) Ваша ветка будет принудительно сделана так, чтобы она указывала на 145bb80
. Любые другие совершения, которые произошли, будут потеряны. Это форма перезаписи истории, поэтому будьте уверены, что это то, что вы хотите сделать. Вы также получите сообщение об ошибке, если попытаетесь нажать ветку. Он скажет вам, что это не быстрое переключение, и вам нужно сделать git push --force
, чтобы принудительно установить его в удаленном репозитории. Опять же, будьте осторожны. Убедитесь, что это то, чего хочет ваша команда.
2) git reset --hard
удаляет любые локальные изменения в вашем индексе и рабочем дереве. Поэтому, если вы хотите их сохранить, вам нужно занести их перед использованием git reset --hard
.
Существует еще один выбор, который намного менее опасен. Это было бы для возврата назад. Это звучит немного глупо, но это позволяет вашей истории продолжать быстро.
Кроме того, если бы вы просто как копия файла, как это было в 145bb80
, то вы можете сделать это с помощью:
git checkout 145bb80 -- path/to/file
Вы можете использовать следующие для восстановления дерева к содержимому это было в 145bb800
:
git checkout 145bb80 -- .
Снова, хотя, будьте осторожны с такой командой, как вы можете потерять работу.
Ваш лучший выбор - просто вернуть плохие комманды с git revert
, чтобы избежать отмены работы другими лицами.
Отличный ответ, хотя я бы также хотел упомянуть 'git checkout -p', который позволяет вам легко« вернуть »части коммита. –
Я единственный человек, который использует эту ветку. Итак, чтобы подвести итог, если я сделаю git reset - hard 145bb80, у меня будут те же файлы, что и раньше? – Alen
git reset здесь не подходит, так как он подтолкнул свои изменения вверх по течению и с помощью сброса просто получит ваше дерево в состоянии, в котором вы больше не можете толкнуть. Git checkout будет работать действительно, но будет иметь такой же эффект, как просто использование git revert в том смысле, что вы создаете новую фиксацию. –