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

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

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

git branch test

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

3 ответов


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

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

  • при перемещении между деревьями, в которых добавлены или удалены новые файлы, a 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.