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