Случайно зафиксировано в основной ветке перед переключением на локальную ветку и нажатием неполной информации - как вернуться и объединить - PullRequest
1 голос
/ 12 октября 2019

Так что я был немного идиотом здесь. Я работал над мастер-веткой, сделал несколько коммитов, понял, что я нахожусь в мастер-ветке, зашел в другую ветку, предполагая, что коммиты будут перенесены, зафиксированы один раз в ветке, а затем отправлены. После проверки репозитория GitHub я вижу, что был выдвинут только последний коммит.

О-о-о, как мне отменить это, объединить все коммиты с локальной веткой и повторно отправить его?

Моя история коммитов:

commit 9dc4373ea546dd90e27d3c0a75b39c2656799638 (HEAD -> feature/implement-checkout, origin/feature/implement-checkout, master)
    Implement checkout service

commit 0cf3ec312c94d0b6a9d94f37b439ff4bea70199f
    Add seeds

commit b6bcabcf15eacad8c94e96e4e325f5b2695a8ade
    Add bills and bill discounts

commit a7cf1c5261b1fbbd2cadc0bf8899ab5729ea5ed7
    Add bill item model

commit 52a812a5f495f9950efee887bfe7678355c56f18
    Create bill model

commit 7b17847d45c1d04ed86928599ed7e16770f19fcc
    Add item model

commit 188e82a1b36fe8439457c3a8f85609fb4f2c9f40
    Add Rspec

commit 9b4c9393d19339a5264ce1d51db935f73a9a84ea
    Initialize app

1 Ответ

0 голосов
/ 12 октября 2019

Безопасным способом для продолжения здесь было бы просто вернуть один коммит в другую ветку, а затем перестроить его так, как вы хотите.

# from other_branch
git revert HEAD
git cherry-pick master~6^..master
git cherry-pick HEAD~8

На этом этапе ваш other_branch должен выглядетьнапример:

other_branch: ... A -- A_R -- M1 -- M2 -- M3 -- M4 -- M5 -- M6 -- M7 -- A'

Здесь A - это первоначальный одиночный коммит, который вы сделали в этой ветке, а A_R - это возвратный коммит. На этом этапе, прежде чем мы выберем вишню M1 из master, ваша ветвь выглядит так, как будто вы даже не сделали этот коммит. Затем мы выбираем 7 самых последних коммитов для master как M1 до M7. Наконец, мы повторно применяем ваш единственный коммит в A'.

. Теперь вы можете регулярно передавать эту ветку в GitHub:

git push origin other_branch

Наконец, для очистки нам нужно удалить коммиты. Вы сделали до master. Предполагая, что вы еще не нажали master, мы можем просто сделать полный сброс:

# from master
git reset --hard HEAD~7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...