Git - Как отменить фиксацию в неправильной локальной ветке? - PullRequest
0 голосов
/ 02 марта 2019

Моя настройка Git такова, что я работаю в локальной ветке «Feature» и фиксирую изменения в этой ветке во время работы.Когда код готов, я сливаюсь в локальную ветку "разработка".Затем я помещаю изменения в мою локальную ветвь "разработка" в удаленную ветку "разработка".

Я внес некоторые изменения в файл и зафиксировал их, не осознавая, что я был в своей локальной ветви "разработка", а не"особенная" ветка.Я осознал свою ошибку, прежде чем перенести ветку «разработка» в удаленную ветку «разработка», поэтому изменения остаются локальными.

Как отменить этот коммит в моей локальной ветке «разработка»?Я использую Tortoise Git, но я все еще могу использовать командную строку Git, если это необходимо.

Примечание: это не первый мой коммит в ветке Feature или первое слияние с веткой Develop.

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

Итак, давайте поговорим о том, как переместить эти коммиты в ветку возможностей, а затем отменить их.В целях этого объяснения мы будем предполагать, что только локальные коммиты поступили в вашу ветку develop локально.

  1. Получите хеши коммитов для каждого из ошибочных коммитов на develop,Вы можете сделать это в своем графическом интерфейсе или оформить заказ develop и запустить git log в терминале.Скопируйте и вставьте их туда, где вы сможете сослаться на них позже.

  2. Оформите свою ветку feature.Теперь вы будете запускать git cherry-pick <commit_hash> для каждого из хэшей коммитов, которые вы сохранили на шаге 1.Вы хотите сделать это в том порядке, в котором они были зафиксированы в ветке develop.Это воспроизводит каждый из этих коммитов в вашу локальную ветку feature.

  3. Сделайте полный сброс в вашей ветке develop, чтобы вернуть ее в удаленную версию.Предполагая, что удаленная ссылка равна origin/develop, вы должны сделать git reset --hard origin/develop

Обратите внимание, что есть другие способы сделать это, используя git rebase или используя интерактивные перебазировки.Это просто самый простой способ, которым я мог бы придумать, передать его кому-то, у кого неизвестный опыт работы с git.

Обратите внимание, что если вы беспокоитесь о возможности возврата в случае, если все пойдет не так, как ожидалосьВы можете использовать git tag для создания тегов спасения.

0 голосов
/ 02 марта 2019

Если вы забыли создать ветку для своей функции, вы должны создать ее:

git branch feature

Затем вы можете сбросить develop туда, где и должно быть:

git reset --hard HEAD~

Если у вас уже есть ветка feature, в которую вы хотите переместить коммит, который вы случайно сделали на develop, тогда вы можете использовать git cherry-pick:

git checkout feature
git cherry-pick develop

Затем вы можете сбросить developкак указано выше.Только не забудьте сначала проверить это:

git checkout develop
0 голосов
/ 02 марта 2019

Существует несколько способов решения проблемы.Одним из способов будет cherry-pick коммит в вашей feature ветви.Затем reset ваша develop ветвь к предыдущему коммиту.

  1. git checkout feature
  2. git cherry-pick <commit hash>
  3. git checkout develop
  4. git reset --hard HEAD~1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...