Как создать ветку 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
,