Как переместить невыполненные коммиты из одной (локальной) ветки в другую в git?

Я хотел бы переместить свой локальный коммит, еще не отправленный на удаленный, в другую ветку.

Я должен следовать этому рабочему процессу. Мы только начали с этой практики, поэтому вроде забыли. У нас есть JIRA и Bit-Bucket. Мы должны создать ветку из элемента JIRA. Затем я проверяю эту ветку локально, работаю над ней и фиксирую (нажимаю) на нее и делаю запрос на извлечение рецензенту кода, затем он объединяется с соответствующей веткой и вверх к мастеру.

Я забыл создать ветку для элемента JIRA. Вместо этого я работал и коммитил свою локальную ветку, скажем, 4.10BR. Я сделал 3 отдельных фиксации (относительно этих 3 отдельных элементов JIRA).

Мой журнал git говорит... В выпуске ветки/4.10 Ваша ветка опережает «origin/release/4.10» на 3 коммита. (используйте «git push» для публикации ваших локальных коммитов)

Теперь я бы создал ветку отдельно для этих трех элементов в (через) Jira-BitBucket, проверил эти ветки и «переместил» свои коммиты в эти ветки (скажем, b1, b2 и b3), а затем отправил эти ветки.

Поскольку я все еще изучаю git, у меня нет способа продвинуться в этом?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
637
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

Создайте новую настоящую добросовестную ветку, которую вы должны были создать в первую очередь:

# from release/4.10
git branch feature/some_name

Теперь создана ветка feature/some_name, которая содержит вашу единственную фиксацию работы. Единственная оставшаяся проблема — это ветка release/4.10, которая теперь также содержит нежелательный коммит. Учитывая, что у вас есть нет, но вы отправили ветку релиза, мы можем попробовать выполнить полную перезагрузку этой ветки, чтобы удалить эту фиксацию:

# from release/4.0, again
git reset --hard HEAD~1

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

Вы можете создать новую ветку из текущей ветки с помощью команды git checkout -b 'name-of-branch'. Это удерживает ваш код с 3 фиксациями, не помещенными в новую ветку. Если вы уже создали ветку, вы можете объединить текущую ветку с другой веткой с помощью git merge 'other-branch'.

Если вы хотите перенести свои изменения в существующую ветку и/или у вас много коммитов в неправильной ветке, попробуйте следующее. В моем случае я зафиксировал мастер, когда хотел зафиксировать разработку, поэтому это будет выглядеть так:

git checkout develop
git merge master
git checkout master
git reset --hard [HASH]

где [HASH] — это хэш коммита перед вашими нежелательными изменениями, вы также можете использовать HEAD~n вместо [HASH], n — количество нежелательных коммитов.

Если вашей ветки не существует, просто создайте ее с помощью git checkout -b branchname, затем объедините и сбросьте.

Другие вопросы по теме