Как создать ветку git, чтобы добавляемые в нее файлы не добавлялись в master? - PullRequest
8 голосов
/ 27 января 2012

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

Я использовал эту командучтобы создать ветку:

git branch test

Но любой файл, который я добавляю в master, я вижу в test.И любой новый файл, добавленный в test, я вижу в master.Как этого избежать?Я не использовал опцию --track при создании ветки.

Ответы [ 3 ]

19 голосов
/ 28 апреля 2014

Я думаю, что вы хотели:

git checkout --orphan somebranch

это создаст somebranch без какой-либо истории, вы можете добавить, какие файлы вы хотите к этому, и они могут отличаться на 100% от ваших предыдущих ветвей.

5 голосов
/ 27 января 2012

То, что вы просили, это именно то, что делает git branch test (точка, из которой две истории больше не передаются).Здесь есть два уровня путаницы:

  • Когда вы git add newfile, вы добавляете его в индекс, но не фиксируете его или не обновляете какую-либо ветку со своим содержимым.Когда вы извлекаете новую ветвь, то, пока нет конфликта, git не будет сбрасывать эти изменения из индекса.Это желательное поведение, например, если вы работаете в другой ветке и хотите перенести только часть неподтвержденных изменений в другую ветку.Если вы git commit измените состояние индекса в своей исходной ветви, индекс не сохранит эти изменения, когда вы вернетесь к тестовой ветви.

  • Когда вы перемещаетесь между деревьями,если новые файлы добавлены или удалены, git checkout не обязательно удалит их из файловой системы (если есть операция сброса).Затем вы можете «видеть» эти файлы при переключении веток, например, в выводе ls или git status - но они «не отслеживаются», и git не будет пытаться что-либо с ними делать (например, git commit -a), не будет добавлять этот файл в индекс до написания нового дерева).Здесь не о чем беспокоиться, но если вы не согласны с этим, вы можете удалить их (или использовать git clean).

2 голосов
/ 27 января 2012
git branch test
git add .
git checkout test
git checkout master

Пока вы не делаете коммит, вы увидите свое рабочее дерево и индекс (который ссылается на то, что вы добавили) в обеих ветвях test и master.

git checkout test
git commit -m "files for test"
git checkout master

Тогда вы не увидите в master файлы, которые вы только что зафиксировали в test.
В вашей новой ветке test будет запись нового коммита (с новым содержимым), независимо от master.

...