Git откат 1 тянуть
У меня есть веб-сервер, который служит проекту, который представляет собой репозиторий git. Когда я делаю некоторые изменения в коде, я затем выполняю git pull с сервера. Иногда новый код просто выходит из строя, я хотел бы иметь возможность сделать откат до последней тяги, той, что была раньше. Я хочу сделать это с помощью script, без необходимости искать последнюю версию. Как я могу это сделать?
Изменить: просто для того, чтобы уточнить, я просто хочу сделать одно действие, например, нажать кнопку, которая гласит: "Ой! Это последнее приключение, которое я только что сделал, было ошибкой, мне жаль, что я этого не делал". Я не хочу искать ша или теги или что-то еще в этой ситуации, это больше похоже на функцию "отменить".
Затем я хочу, чтобы иметь возможность продолжить работу над кодом, и следующее нажатие на сервер должно внести последние изменения.
Ответы
Ответ 1
git reset --hard HEAD^1
вернет вам одну фиксацию из того, что вы вытащили. Если вы хотите вернуть его в состояние, в котором оно было, прежде чем вы потянете, используйте git reset --hard [email protected]{1}
. Треки @{1}
, в которых голова находилась до последней операции, которая изменила ее в вашем локальном репо, поэтому она вернет несколько коммитов, если несколько были нажаты до того, как вы потянули. Также см. git reflog
, чтобы отобразить весь список.
Ответ 2
git reset HEAD^
должен перейти к предыдущей фиксации. Подробнее см. здесь.
Ответ 3
В этом случае имеет смысл использовать ветку, которую можно легко удалить или объединить при неудаче или успехе. Это поможет вам следить за тем, что является новым, и сделать вещи более чистыми, если у вас более сложные случаи, чем "просто удалить последнюю фиксацию" (тем более, что вы хотите сделать это с помощью script). Итак, на вашем сервере:
git fetch --all # fetch new commits from remote
git checkout -b testing # create and switch to branch 'testing'
git merge origin/master # merge new commits from remote branch master
# (in branch 'testing')
... затем проверьте материал... если успех:
git checkout master # switch back to master
git merge testing
и при сбое:
git checkout master
git branch -D testing # remove testing branch
Но в любом случае... Это единственное, что нужно сделать, чтобы удалить последнюю фиксацию, вы можете использовать git reset
, как указано Джошем.
Ответ 4
Принятый ответ от @Karl Bielefeldt не совсем сработал у меня. Я использую GIT версию 2.10.0.windows.1
Возможно, это сработало для более старых версий. Я получаю сообщение об ошибке "unknown switch 'e".
Наконец, я сделал некоторые изменения, и это сработало.
Ниже приведены шаги, чтобы вернуться к состоянию перед предыдущим нажатием:
- Используйте
git reflog
, чтобы просмотреть список, упомянутый Карлом.
- Выберите версию фиксации из списка, в который вы хотите вернуться.
- Выполнить
git reset --hard <commit version>
Ответ 5
Другой способ сделать это - использовать теги. Мысль о том, что вы можете пометить свой HEAD каким-то номером версии до вытягивания, сделайте тягу, а затем, если вам нужно отбросить назад HEAD, вы можете сделать git reset {tag name}
Таким образом, если тяга имеет несколько коммитов, вы можете пропустить назад туда, где вы были до слияния.