Почему «git checkout» работает только для некоторых веток? - PullRequest
4 голосов
/ 26 сентября 2011

Вот результат двух проверок: почему отказывает второй?'git status' показывает, что некоторые файлы были изменены, но я уверен, что не коснулся этих файлов.

praveensripati@MyMini:~/Hadoop/Git/hadoop-common$ git checkout branch-0.21  
Switched to branch 'branch-0.21'  

praveensripati@MyMini:~/Hadoop/Git/hadoop-common$ git checkout branch-0.20  
error: The following untracked working tree files would be overwritten by checkout:  
    CHANGES.txt  
    LICENSE.txt  
    README.txt  
    bin/hadoop  
    bin/hadoop-daemon.sh  
    bin/hadoop-daemons.sh  
Please move or remove them before you can switch branches.  
Aborting

praveensripati@MyMini:~/Hadoop/Git/hadoop-common$ git status
# On branch trunk
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   CHANGES.txt
#   LICENSE.txt
#   README.txt
#   bin/
#   build.xml
#   conf/
#   lib/
#   site/
#   src/
nothing added to commit but untracked files present (use "git add" to track)

Ответы [ 3 ]

5 голосов
/ 26 сентября 2011

Это происходит потому, что некоторые или все файлы, которые не отслеживаются в текущей ветке, отслеживаются веткой, на которую вы хотите перейти.

Например, ветка может содержать CHANGES.txt,Потому что git не хочет перезаписывать файл, который у вас есть в вашей рабочей области, если выдает эту ошибку, чтобы вы могли создавать резервные копии локальных файлов.Вы можете либо:

  1. Переместить эти файлы в безопасное место
  2. Если вы уверены, что эти файлы вам не нужны, вы можете выполнить проверку -f, чтобы переключиться на ветку (этоперезапишет все конфликтующие файлы)

Копирование не работает для файлов, которые не отслеживаются в текущей ветви.Вы можете использовать git diff, чтобы определить, какие файлы находятся на 0.20, а не на 0.21.Например:

git diff --name-only branch-0.20
3 голосов
/ 26 сентября 2011

Это может произойти, если на месте установлен фильтр, автоматически изменяющий содержимое этих файлов при оформлении заказа. Как в:

core.autocrlf=true

(См. Почему я должен использовать core.autocrlf = true в Git? )

Например, если стиль eol изменяется автоматически, вы бы изменили файлы в своем рабочем дереве.
И этого будет достаточно, чтобы предотвратить повторную проверку с общими измененными файлами.

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

0 голосов
/ 26 сентября 2011
git stash 
git checkout branch-0.20
git stash apply

попробуйте выше

...