Как моему коллеге удалось заставить файлы git checkout перемещать файлы? - PullRequest
3 голосов
/ 23 декабря 2011

Обычно, когда вы:

  1. git checkout foo
  2. Изменить файл
  3. git checkout bar

Git скажет вамчто вы не можете изменить ветки, потому что у вас есть незафиксированные модификации.(У меня нет точного сообщения передо мной, но это что-то на этот счет).Затем вы, как правило, используете git stash, чтобы избавиться от этих модификаций, и вы находитесь на своем веселом пути.

Мой коллега (который является новичком в Git и поэтому намеренно не делает ничего продвинутого) нетакое поведение.На ее машине, когда она делает git checkout bar, она просто перемещает изменения, которые она сделала на foo в bar.Это очень смущает меня, так как я использую Git по крайней мере уже год и никогда не видел, чтобы он так себя вел.

Что мог бы сделать мой коллега, чтобы Git просто перестал работать?-добавленные / незафиксированные измененные файлы между ветками, вместо того, чтобы жаловаться и требовать git stash?

Ответы [ 2 ]

4 голосов
/ 23 декабря 2011

(Я только что написал следующий текст для вчерашних коллег, которые являются новичками в Git. Надеюсь, это поможет.)

Если вы внесли изменения в файлы в ветви A и хотите переключиться на ветку B (который не имеет отношения), тогда хорошей идеей будет сначала зафиксировать изменения в ветке А.Таким образом, изменения будут по-прежнему на ветви A, когда вы вернетесь к ней позже.(Другой вариант называется «stashing», который полезен в некоторых ситуациях - см. http://schacon.github.com/git/git-stash.html для получения дополнительной информации.)

Если вы не фиксируете изменения первыми, то есть две ситуации, которыеможет возникнуть.Рассмотрим файл «file.txt» и ветви A и B. Возможны две ситуации:

  1. Последняя версия файла file.txt в ветви A и ветви B идентична.В этом случае «git checkout B» перенесет изменения в file.txt в ваш рабочий каталог после успешного переключения на ветку B. Это может быть полезно для таких вещей, как изменения в файлах конфигурации платформы.Git перечислит файлы, перенесенные таким образом, в выходные данные команды «git checkout».
  2. Последние версии файла file.txt в ветви A и ветви B отличаются.Когда вы попросите переключить ветки на ветку B, git откажется переключать ветки, потому что это перезапишет ваши изменения в file.txt.Вы получите сообщение от git о том, что сначала вы должны зафиксировать (или спрятать) конфликтующий файл (ы).

Если у вас есть более одного измененного файла, то любой файл в ситуации (2) предотвратит переключение веток.

Наконец, если вы хотите отменить изменения в файле, используйте команду типа «git checkout - file.txt».Это исключит любые незафиксированные изменения в file.txt и восстановит его до последней подтвержденной версии из вашей текущей ветки.

2 голосов
/ 23 декабря 2011

«Нормальный» - это то, что вы, коллеги, видите. Если в вашем рабочем каталоге есть какие-то изменения, и вы переключаетесь на другую ветку, изменения также будут доступны и для этой ветви.

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

Тест:

git init .
touch a
git add a
git commit -m "adding a"
git branch temp
vi a #add something
git checktout temp # allows you to change
git commit -am "content in a"
vi a #add more content
git checkout master #won't allow you to change!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...