Как создать ветку git, чтобы файлы, добавленные в нее, не добавлялись в master?

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

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

git branch test

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

3 ответа

Решение

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

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

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

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

git checkout --orphan somebranch

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

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,

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