Я хотел бы переместить свой локальный коммит, еще не отправленный на удаленный, в другую ветку.
Я должен следовать этому рабочему процессу. Мы только начали с этой практики, поэтому вроде забыли. У нас есть 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, у меня нет способа продвинуться в этом?
Это распространенная ошибка рабочего процесса, которую я совершал десятки раз за последнее десятилетие. Обычный способ, которым я занимаюсь, - это сделать следующее:
Создайте новую настоящую добросовестную ветку, которую вы должны были создать в первую очередь:
# 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
, затем объедините и сбросьте.