Почему моя новая ветка Git не пуста? - PullRequest
0 голосов
/ 06 июня 2011

Предположим, мы начинаем с новой настройки.

touch somefile
git init .
git add .
git commit -m "initial commit"
git branch dev
git checkout dev

После выполнения git status я получаю

nothing to commit (working directory clean)

После выполнения git merge master я получаю

Already up-to-date.

Почему это?Я думал, что новая ветвь начинает чистую (и пустую), пока мы не добавим контент напрямую или не сойдемся с существующей веткой.

Ответы [ 4 ]

4 голосов
/ 06 июня 2011

Ветви в Git - не более чем указатели на коммиты.Когда вы создаете ветку, как вы это сделали, она указывает на тот же коммит, что и другая ветка.Как только вы что-то делаете, после этого вы увидите, что они различаются.Большинство других систем контроля версий не работают на подходах, основанных на снимках.

Таким образом, когда вы запускаете команду слияния, ей нечего объединять, поскольку ваша текущая ветвь уже содержит все коммиты другой ветки.

Я бы настоятельно рекомендовал прочитать progit.org/book и полностью понять DAG (направленный ациклический граф), которому следует структура истории.

Надеюсь, это поможет.

0 голосов
/ 22 октября 2012

Ветви в git - это указатели, но они могут быть, если можно так выразиться, пустыми, если вы хотите, чтобы они использовали сирот. После того, как вы создали сиротскую ветвь, проверьте статус, и вы увидите, что дерево все считается новым и ожидает добавления. Удалите его, и вы получите чистую ветвь, за которой вы ищете.

mkdir foo
cd foo
touch somefile
git init .
git add .
git commit -m "initial commit"
git checkout --orphan dev
rm -rf .

Это возможно только с git 1.7.2 или выше.

0 голосов
/ 06 июня 2011

Новая ветвь не запускается «свежей и чистой» (какой в ​​этом смысл?), Она содержит все файлы, которые были в исходной ветке в точке ветвления.

0 голосов
/ 06 июня 2011

Новая ветвь dev будет создана с состоянием ветки master, так что нечего сливать с веткой dev, пока вы не внесете изменения в master (после того, как ветка dev быласоздан изначально).

...