git remove фиксирует в новой ветке, которая была случайно создана из ветки, отличной от master - PullRequest
0 голосов
/ 20 сентября 2019

Я создал новую ветку от master и назвал ее «LoginFeature».Я завершил всю работу в этой ветке и затем вернул ее обратно в LoginFeature.Затем я создал новую ветку «Dashboard» из «LoginFeature» и слил Master в «Dashboard».Я добавил несколько файлов кода в «Панель инструментов» и перенес их в свою ветку «Панель инструментов» на сервере.

На следующий день я понял, что должен был создать «Панель управления» из «Мастер» вместо «LoginFeature».

Как это исправить?Могу ли я удалить все коммиты ветки LoginFeature из ветки Dashboard.Или я должен удалить ветку 'Dashboard' из локальной и удаленной системы и воссоздать ветку 'Dashboard' из master и скопировать и вставить мои новые файлы в эту ветку?

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Давайте начнем с диаграммы ветвления:

master:        A -- B -- C
                     \
LoginFeature:         D -- E
                            \
Dashboard:                   F -- G

Вы хотите получить эту структуру:

LoginFeature:         D -- E
                     /
master:        A -- B -- C
                          \
Dashboard:                 F' -- G'

Мы можем попробовать использовать git rebase --onto здесь:

# from your Dashboard branch
git checkout Dashboard
git rebase --onto C E

Это говорит о том, что необходимо перебазировать ветку Dashboard путем переписывания истории таким образом, чтобы коммит, родитель которого был E (что на диаграмме выше F), теперь находится на новом коммите / базе C.Здесь C - это последний коммит в ветви master.

Обратите внимание, что я пометил F' и G' коммит после перебазировки с тире.Это означает, что эти коммиты на самом деле полностью новые коммиты.Перебазирование коммитов обычно означает их переписывание.

Кроме того, ваша фактическая ветвь Dashboard имеет коммит слияния, исходящий из master.Но rebase по умолчанию будет игнорировать коммиты слияния, поэтому его нужно отбросить во время перебазирования в процесс.

1 голос
/ 20 сентября 2019
  1. Удалите ветку Dashboard и заново создайте ее из ветки Master.Добавьте все файлы еще раз и нажмите их.
  2. Вы можете изменить родительский элемент для ветви Dashboard.Поскольку в SHA для фиксации участвуют их родители, при изменении родителя для данного коммита его SHA изменится, и это создаст путаницу для других пользователей.Для этого вы должны использовать rebase:
git rebase --onto `new_parent` `old_parent`
...