Я только недавно начал использовать Git, и у меня есть дурная привычка начинать программирование без предварительного создания новой ветки. То есть я модифицирую код прямо из ветки master
.
Можно ли перенести изменения, сделанные в одной ветке, в другую и, таким образом, оставить ветку master
чистой?
Если возможно.
Если вы еще ничего не сделали
commit
Прямо сейчас вы находитесь в
master
. Если вы наберете, выgit status
увидите список файлов, которые были изменены, но не зафиксированы .Просто создайте ветку:
Эта команда создает его и автоматически переносит вас к нему, забирая с собой все эти изменения.
Действительно, если вы сделаете это
git status
снова, вы увидите, что эти изменения появляются там, поэтому выполнение acommit
приведет к их перемещению в эту веткуnueva_rama
, а не вmaster
.Если вы уже сделали
commit
В этом случае его придется сначала разобрать. Как читается в разделе Как отменить последнюю фиксацию в Git? , использует:
или больше раз, если коммитов больше. С этого момента
git status
он снова покажет эти изменения в статусе «незафиксированные».Итак, мы вернулись к предыдущему пункту . Если вы еще ничего не сделали
commit
, выполните следующие действия.Вы также должны иметь в виду, что
master
вам придется отменить довольно много коммитов. Следовательно, вы должны вернуться в предыдущее состояние, выполнивgit checkout <número del último commit válido>
.Если вы сделали несколько коммитов в мастере, вам нужно просто создать ветку
git checkout -b nueva_rama
, как говорят другие ответы, если у вас есть какие-либо изменения без их фиксацииcommit
,stash
то вы возвращаетесь в свою веткуmaster
с помощьюgit checkout master
, они ищут,git log
какой из них есть коммит, к которомуmaster
должна быть ветка, и вы переключаетесь на мастер сgit reset --hard commit_hash
. Вы должны остаться с новой веткой с нужными коммитами и вашей основной веткой без коммитов.Если вы не вытащили какие-либо коммиты, вам просто нужно создать ветку и зафиксировать свои изменения.
Если ветка уже существует, вы можете сделать
git rebase
https://git-scm.com/docs/git-rebase , а затем остановиться на мастере и сделать тоgit reset --hard
же самое в первом примере.