为什么'git checkout'仅适用于某些分支机构?

时间:2011-09-26 07:55:02

标签: git git-checkout

以下是两次结账的结果:为什么第二次结账失败? '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 个答案:

答案 0 :(得分:5)

这是因为您想要更改的分支正在跟踪当前分支上未跟踪的部分或全部文件。

例如,分支可能包含CHANGES.txt。因为git不想覆盖您工作区中的文件,如果给出此错误以允许您备份本地文件。你可以:

  1. 将这些文件移到安全的地方
  2. 如果您确定不需要这些文件,可以执行checkout -f切换到分支(这将覆盖任何冲突的文件)
  3. 存储不适用于当前分支上未跟踪的文件。您可以使用git diff来确定哪些文件在0.20但不在0.21上。例如:

    git diff --name-only branch-0.20
    

答案 1 :(得分:3)

如果有过滤器,可以在结帐时自动更改这些文件的内容。如:

core.autocrlf=true

(见Why should I use core.autocrlf=true in Git?

例如,如果自动更改eol样式,您将在工作树中修改文件 这足以阻止使用常见修改文件进行另一次结账。

您可以将更改存储为Kit suggests,但我建议首先了解这些更改的原因。

答案 2 :(得分:0)

git stash 
git checkout branch-0.20
git stash apply

尝试上面