В других ответах уже указывалось, что вы можете использовать функцию сброса, чтобы переместить HEAD обратно в коммит до того, как коммит произошел. Давайте просто разбежимся по крошечному примеру. Вы хотите поработать над веткой объектов и хотите объединить ее с основной веткой ..
Пример слияния и сброса
$ git log --online
695d21b add some content
9aefcac initial commit
Теперь вы объединяетесь в ветке возможностей ..
$ git merge --no-ff feature-123
Merge made by the 'recursive' strategy.
feature-123.txt | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 feature-123.txt
Однако, посмотрев на изменения, вы понимаете, что не хотели объединяться
в этой ветке в конце концов. Нет проблем. Выходные данные журнала показывают, что
ветвь master была на 695d21b раньше - просто переместите туда указатель HEAD:
$ git reset --hard 695d21b
Рефлог
Теперь ваша рабочая копия выглядит так, как будто ее никогда не было. Но так как вам было интересно, есть ли что-то еще в хранилище после этого слияния - объект фиксации все еще остается в хранилище:
ec4b538 HEAD@{2}: merge feature-123: Merge made by the 'recursive' strategy.
695d21b HEAD@{6}: checkout: moving from feature-123 to master
c08056a HEAD@{7}: commit: add feature 123
695d21b HEAD@{8}: checkout: moving from master to feature-123
695d21b HEAD@{9}: commit: add some content
9aefcac HEAD@{10}: commit (initial): initial commit
Этот список показывает все коммиты, на которые указывал HEAD в какой-то момент. Это довольно круто, потому что это означает, что даже если вы что-то напортачили, всегда есть возможность вернуться к вашему последнему стабильному состоянию.
Тестирование ..
Теперь, если вы все еще чувствуете себя неуверенно по поводу какого-либо слияния или другой операции, которую вы собираетесь сделать, вы всегда можете просто создать одноразовую ветку и попробовать ее там сначала. Конечно, технически это может быть не нужно, как я только что показал вам, но это может быть полезно, потому что
не имеет значения, что происходит в этой отрасли. Вы можете просто избавиться от этого потом.
Нажав ..
Если вы вернетесь назад в HEAD, как в примере выше, вам не нужно беспокоиться о переносе мусора в публичное репо: «git push» не будет выталкивать что-либо за пределы вашего текущего HEAD. Однако вам следует помнить, что после того, как вы отправили что-то в публичный репозиторий, вам больше не нужно возиться с историей локально.
Может быть, я слишком обдумал это - надеюсь, это помогло :) 1029 *