Подтвердить что ты не робот

Git откат 1 тянуть

У меня есть веб-сервер, который служит проекту, который представляет собой репозиторий git. Когда я делаю некоторые изменения в коде, я затем выполняю git pull с сервера. Иногда новый код просто выходит из строя, я хотел бы иметь возможность сделать откат до последней тяги, той, что была раньше. Я хочу сделать это с помощью script, без необходимости искать последнюю версию. Как я могу это сделать?

Изменить: просто для того, чтобы уточнить, я просто хочу сделать одно действие, например, нажать кнопку, которая гласит: "Ой! Это последнее приключение, которое я только что сделал, было ошибкой, мне жаль, что я этого не делал". Я не хочу искать ша или теги или что-то еще в этой ситуации, это больше похоже на функцию "отменить". Затем я хочу, чтобы иметь возможность продолжить работу над кодом, и следующее нажатие на сервер должно внести последние изменения.

4b9b3361

Ответ 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} Таким образом, если тяга имеет несколько коммитов, вы можете пропустить назад туда, где вы были до слияния.