Я только что сделал отличную фиксацию не на той ветке. Как мне отменить последний коммит в моей основной ветке, а затем принять те же самые изменения и перенести их в мою ветку обновления?
git
git-commit
mikewilliamson
источник
источник
git reset --soft HEAD\^
4 года с опозданием на тему, но это может быть полезно для кого-то.
Если вы забыли создать новую ветку перед фиксацией и зафиксировали все на master, независимо от того, сколько коммитов вы сделали, следующий подход проще:
Теперь ваша ветка master равна
origin/master
и все новые коммиты включеныmy_feature
. Обратите внимание, чтоmy_feature
это локальная ветвь, а не удаленная.источник
master
, а затем сбрасываетсяmaster
вorigin/master
.origin/master
уже на коммите, который вы хотите сбросить! Кредит на кончике однако эту страницу: github.com/blog/...Если у вас есть чистая (неизмененная) рабочая копия
Чтобы откатить один коммит (обязательно запишите хеш коммита для следующего шага):
Чтобы перетащить этот коммит в другую ветку:
Если вы изменили или не отслеживали изменения
Также обратите внимание, что
git reset --hard
это убьет любые неотслеживаемые и измененные изменения, которые вы можете иметь, поэтому, если у вас есть такие, вы можете предпочесть:источник
git rev-parse BRANCH_NAME
чтобы получить ша.git reflog show <branch>
!git stash
выполнить сброс до сброса иgit stash pop
впоследствии использовать его для восстановления, поэтому не нужно бояться--hard
частиЕсли вы уже выдвинули свои изменения, вам нужно будет выполнить следующий толчок после сброса ГОЛОВКИ.
Предупреждение: полный сброс отменяет любые незафиксированные изменения в вашей рабочей копии, в то время как принудительное нажатие полностью перезаписывает состояние удаленной ветви на текущее состояние локальной ветви.
На всякий случай, в Windows (с использованием командной строки Windows, а не Bash) их на самом деле четыре
^^^^
вместо одного, поэтомуисточник
git reset --hard COMMIT_HASH
git push --force
Я недавно сделал то же самое, где я случайно совершил смену мастера, когда я должен был совершить переход в другой филиал. Но я ничего не толкал.
Если вы только что перешли на неверную ветку и с тех пор ничего не изменили и не продвинулись в репо, вы можете сделать следующее:
ПРИМЕЧАНИЕ: в приведенном выше примере я перематывал 1 коммит с git reset HEAD ~ 1. Но если вы хотите перемотать n коммитов, вы можете выполнить git reset HEAD ~ n.
Кроме того, если вы в конечном итоге зафиксировали неправильную ветку, а также написали еще немного кода, прежде чем поняли, что вы приняли неверную ветку, то вы можете использовать git stash для сохранения выполняемой работы:
ПРИМЕЧАНИЕ: я использовал этот сайт в качестве ссылки https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/
источник
git checkout -b new_branch
правильное, оттуда коммиты были целы, просто нажали и создали пиар, не так ли не нужно совершать снова.Поэтому, если ваш сценарий состоит в том, что вы совершили,
master
но намеревались выполнитьanother-branch
(который может или не может уже существовать), но вы еще не отдалились, это довольно легко исправить.Теперь все ваши коммиты
master
будут включеныanother-branch
.Источник с любовью от: http://haacked.com/archive/2015/06/29/git-migrate/
источник
another-branch
уже существовал. В этом случае он просто обнажил коммиты, которые я сделал, чтобы освоить, и не надевал ихanother-branch
.Чтобы уточнить этот ответ, в случае , если у вас есть несколько коммитов , чтобы перейти от, например ,
develop
дляnew_branch
:источник
Если вы столкнулись с этой проблемой, и у вас есть Visual Studio, вы можете сделать следующее:
Щелкните правой кнопкой мыши по вашей ветке и выберите
View History
:Щелкните правой кнопкой мыши на коммите, к которому вы хотите вернуться. И вернуть или сбросить при необходимости.
источник
Для нескольких коммитов на неправильной ветке
Если для вас это всего лишь 1 коммит, то есть множество других более простых решений сброса. Для меня у меня было случайно сделано около 10 коммитов
master
вместо, давайте назовем этоbranch_xyz
, и я не хотел терять историю коммитов.То, что вы могли сделать, и что спасло меня, было использовать этот ответ в качестве ссылки, используя 4-х шаговый процесс, который -
master
branch_xyz
master
Вот вышеупомянутые шаги в деталях -
Создать новую ветку из
master
(где я случайно совершил много изменений)Примечание:
-b
флаг используется для создания новой ветви.Просто чтобы проверить, правильно ли мы это поняли, я бы сделал быстрое,
git branch
чтобы убедиться, что мы находимся вtemp_branch_xyz
ветви, и a,git log
чтобы проверить, правильно ли мы получили коммиты.Объединить временную ветвь в филиал первоначально предназначался для фиксаций, то есть
branch_xyz
.Во-первых, переключитесь на исходную ветвь, т. Е.
branch_xyz
(Вам может понадобиться,git fetch
если у вас нет)Примечание. Не используйте
-b
флаг.Теперь давайте объединим временную ветку с веткой, которую мы сейчас извлекаем.
branch_xyz
Возможно, вам придется позаботиться о некоторых конфликтах здесь, если они есть. Вы можете нажать (я бы) или перейти к следующим шагам, после успешного объединения.
Отмените случайные коммиты,
master
используя этот ответ в качестве ссылки, сначала переключитесь наmaster
затем отмените его полностью, чтобы соответствовать удаленному (или конкретному коммиту, если хотите)
Опять же, я бы сделал
git log
до и после, чтобы убедиться, что предполагаемые изменения вступили в силу.Стирание улик, то есть удаление временной ветки. Для этого сначала вам нужно проверить ветку, в которую был добавлен темп, т.е.
branch_xyz
(если вы останетесьmaster
и выполните команду ниже, вы можете получитьerror: The branch 'temp_branch_xyz' is not fully merged
), так что давайтеа затем удалите доказательство этой неудачи
Вот и ты.
источник
Если ветвь, к которой вы хотели применить ваши изменения, уже существует (например, ветвь разработки ), следуйте инструкциям, предоставленным fotanus ниже, затем:
И, очевидно, вы могли бы использовать tempbranch или любое другое имя ветви вместо my_feature если хотите.
Также, если применимо, откладывайте всплывающее окно (применять) до тех пор, пока вы не объединитесь с целевой веткой.
источник
Для меня это было решено путем возврата коммита, который я нажал, затем выбора вишни для коммита в другой ветке.
Вы можете использовать,
git log
чтобы найти правильный хеш, и вы можете отправить эти изменения, когда захотите!источник