Два имени ветки Git, указывающие на одну и ту же ветку? - PullRequest
2 голосов
/ 22 марта 2012

Я думаю У меня тут странная маленькая проблема ... Я все еще довольно новичок в мерзавцах, поэтому, пожалуйста, держись со мной ...

Я создал пустой репозиторий git («Core»), клонированный из ранее существовавшего репо («Production»), используя gitflow. Я снова клонировал это голое репо в не голое репо («Staged»), затем повторно инициализировал поток git в Staged (потому что кажется, что gitflow не встречался, когда я клонировал голое репо ...?)

Но я только что заметил что-то странное. Допустим, я нахожусь в поэтапном репо, на развивающейся ветке, и редактирую текстовый файл (test.txt). Я запускаю git status, и он говорит мне, что test.txt был изменен. Потрясающе.

Теперь я не фиксирую и не объединяю, но я извлекаю мастер, используя git checkout master, затем снова запускаю git status и он говорит, что test.txt был изменен!

Поправьте меня, если я ошибаюсь, но любые изменения, которые я делаю в ветви разработки, вообще не должны влиять на ветку master? Это наводит меня на мысль, что моя ветвь "master" и ветка "development" - это на самом деле одна и та же ветка.

Ясно, что где-то вдоль линии я совершил чрезвычайно глупую ошибку, но где? Без понятия. Это случалось с кем-то раньше? Есть ли какие-либо указания по диагностике проблемы здесь? Есть ли какая-нибудь глупая ошибка, которую я мог бы вспомнить кому-нибудь? Есть ли лекарство?

(Я хотел бы отметить, что мне действительно нужно , необходимо ветвь разработки и мастеров)

Обновление
После внесения изменений в мою ветвь разработки, в результате мастер на самом деле возвращается в свое правильное состояние, и теперь разработка находится в обновленном состоянии. Я начинаю чувствовать, что, возможно, именно так ведет себя мерзавец ???

Финал
Проверьте комментарии здесь. Оказывается, это было решено ранее. Мои извинения.

Ответы [ 2 ]

1 голос
/ 22 марта 2012

В git есть три важных области: хранилище (где хранятся все версии), промежуточный каталог и рабочий каталог. Каталог размещения - это место, где вы вносите изменения перед фиксацией (или куда идут файлы, когда вы запускаете команды «git add»). Рабочий каталог - это набор файлов, которые вы видите в своем извлеченном хранилище.

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

В вашей конкретной ситуации вы изменили свой рабочий каталог, а затем поменялись местами. Поскольку изменения не фиксируются (или не добавляются в промежуточную область), при изменении ветки git просто возвращает рабочий каталог в основную ветку и сохраняет ваши незафиксированные изменения. Это позволяет вам зафиксировать изменения в другой ветке, если хотите.

1 голос
/ 22 марта 2012

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

...