Git: ветки должны изолировать изменения или не должны? - PullRequest
5 голосов
/ 01 июля 2011

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

Я пошел в свой репозиторий песочницы, чтобы повторить проблему:

$ git branch crazy-refactoring
$ git checkout crazy-refactoring
$ rm README
$ git checkout master
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    README
#
no changes added to commit (use "git add" and/or "git commit -a")
$ ls README
ls: cannot access README: No such file or directory

Почему?Весь смысл того, что я создал ветку, заключался в том, что я мог что-то попробовать и выбросить в случае неудачи.Toughts

1 Ответ

6 голосов
/ 01 июля 2011

Вы не зафиксировали удаление.Только зафиксированные изменения являются «изолированными».

По поводу вашего комментария:

Возможно, я что-то упускаю, но мне кажется странным и нежелательным поведением.*

Подумайте об этом:

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

Ваш текущий рабочий каталог - это всегда текущая ветка + незафиксированные изменения (если вы не сбросили их).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...