Создать ветку Git с текущими изменениями - PullRequest
726 голосов
/ 10 октября 2010

Я начал работать над своей веткой master , думая, что моя задача будет легкой. Через некоторое время я понял, что это займет больше работы, и я хочу сделать всю эту работу в новой отрасли.

Как мне создать новую ветку и взять все эти изменения со мной, не пачкая master ?

Ответы [ 5 ]

595 голосов
/ 10 октября 2010

Если вы еще не сделали коммит, достаточно только (1: ветка) и (3: извлечение).
Или в одной команде: git checkout -b newBranch

Как уже упоминалось в справочной странице git reset :

$ git branch topic/wip     # (1)
$ git reset --hard HEAD~3  # (2)  NOTE: use $git reset --soft HEAD~3 (explanation below)
$ git checkout topic/wip   # (3)
  1. Вы сделали несколько коммитов, но понимаете, что они были преждевременны в ветке "master". Вы хотите продолжить полировать их в ветке темы, поэтому создайте ветку "topic/wip" из текущей HEAD.
  2. Перемотайте ветку master, чтобы избавиться от этих трех коммитов.
  3. Переключитесь на ветку "topic/wip" и продолжайте работать.

Примечание: из-за "разрушительного" эффекта команды git reset --hard (она сбрасывает индекс и рабочее дерево. Любые изменения отслеживаемых файлов в рабочем дереве, поскольку <commit> отбрасываются), я бы предпочел пойти с :

$ git reset --soft HEAD~3  # (2)

Это гарантирует, что я не потеряю приватный файл (не добавленный в индекс).
Опция --soft не будет касаться ни файла индекса, ни рабочего дерева (но сбрасывает заголовок на <commit>, как это делают все режимы).

231 голосов
/ 19 августа 2011

Как указано в этом вопросе: Git: Создать ветку из не отмеченных / незафиксированных изменений на мастере : копить не нужно.

Просто используйте:

git checkout -b topic/newbranch

Любая незавершенная работа будет перенесена в новую ветвь.

Если вы попытаетесь нажать, вы получите следующее сообщение

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

git push --set-upstream origin feature/feature/NEWBRANCH

Просто сделайте, как было предложено, чтобы создать ветку удаленно:

git push --set-upstream origin feature/feature/NEWBRANCH

66 голосов
/ 25 августа 2011

Выполните следующие действия:

  1. Создать новую ветку:

    git branch newfeature
    
  2. Оформить заказ в новой ветке: (это не сбросит вашу работу.)

    git checkout newfeature
    
  3. Теперь зафиксируйте свою работу в этой новой ветке:

    git commit -s
    

Используя описанные выше шаги, вы сохраните исходную ветку в чистоте, и вам не нужно делать никаких 'git reset --hard'.

21 голосов
/ 10 октября 2010

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

git stash  # save local modifications to new stash
git checkout -b topic/newbranch
git stash pop  # apply stash and remove it from the stash list
10 голосов
/ 24 апреля 2017

Чтобы добавить новые изменения в новую ветку и отправить на удаленный доступ:

git branch branch/name
git checkout branch/name
git push origin branch/name

Часто я забываю добавить исходную часть для push и запутываюсь, почему не вижу новую ветку / commit в bitbucket

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...