Git - переключение веток (windows) и незафиксированные изменения - PullRequest
8 голосов
/ 03 ноября 2008

Мне трудно понять некоторые концепции git / DCVS. Вот что случилось:

  1. Я создал проект git и импортировал его из репозитория SVN
  2. Я сделал несколько коммитов
  3. Я хотел что-то поэкспериментировать, поэтому я создал ветку с именем constants-update
  4. Я переключился на ветку constants-update , переместил некоторые файлы, удалил другие и добавил еще
  5. Я посвятил эту ветку
  6. Теперь я пытаюсь переключиться на свою основную ветку, используя git checkout master
  7. Я получил эту ошибку: ошибка: у вас есть локальные изменения в 'src / groovy / Constants.groovy'; не может переключать ветви.

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

В качестве примечания, когда я фиксирую git, он предупреждает меня о том, что LF будет заменен CRLF, и также предупреждает меня о некоторых конечных пробелах; после коммита я делаю git status, и группа файлов всегда отображается как #modified ....

Это связано с git / windows , или я не правильно понимаю, что это должно произойти? Я просто хочу переключиться на свою основную ветку , не теряя свои изменения в другой ветке.

Ответы [ 4 ]

4 голосов
/ 03 ноября 2008

Вы правы, думая о том, как это должно работать.

Однако, похоже, что у git проблемы с окончанием строки, и он думает, что все ваши файлы изменены, даже если они не изменены. Я не использую git в Windows, но я собирался предложить опцию «core.autocrlf», чтобы заставить работать crlf. Тем не менее, следующая запись в блоге указывает, что это не очень хорошая идея: http://weierophinney.net/matthew/archives/191-git-svn-Tip-dont-use-core.autocrlf.html

4 голосов
/ 03 ноября 2008

Я решил проблему , взломав мой хук перед фиксацией (комментируя эти строки в .git/hooks/pre-commit с помощью #):

#       if (/\s$/) {
#       bad_line("trailing whitespace", $_);
#       }
4 голосов
/ 03 ноября 2008

Поиск git-stash для смены веток, когда в текущей ветке есть несохраненные изменения.

2 голосов
/ 29 января 2009

Просто используйте следующую опцию в файле .gitconfig, который находится в вашем каталоге пользователей.

[ядро] autocrlf = true

И это решит проблему.

...