忽略文件和git checkout的奇怪行为

时间:2013-09-26 10:04:20

标签: git

有两个分支masterdist/node_modules都有.gitignore条目。

在两个分支中都没有未提交/未跟踪的文件,而且如果我git checkout dist然后再git checkout master,我就是主人,我看到一些文件夹消失了,但并非全部

以下是带命令的流程:

~/p/retwisn git:master ❯❯❯ git status
# On branch master
nothing to commit, working directory clean

~/p/retwisn git:master ❯❯❯ tree node_modules -L 1
node_modules
├── connect-flash
├── connect-redis
├── express
├── grunt
├── grunt-coffeelint
├── grunt-concurrent
├── grunt-contrib-clean
├── grunt-contrib-coffee
├── grunt-contrib-copy
├── grunt-contrib-watch
├── grunt-mocha-cli
├── grunt-nodemon
├── grunt-shell
├── jade
├── mocha
├── redis
├── redis-url
├── should
├── sinon
├── swagger-node-express
└── yaml-config

~/p/retwisn git:master ❯❯❯ git checkout dist

~/p/retwisn git:dist ❯❯❯ git status
# On branch dist
nothing to commit, working directory clean

~/p/retwisn git:dist ❯❯❯ tree node_modules -L 1
node_modules
├── connect-flash
├── connect-redis
├── express
├── grunt
├── grunt-coffeelint
├── grunt-concurrent
├── grunt-contrib-clean
├── grunt-contrib-coffee
├── grunt-contrib-copy
├── grunt-contrib-watch
├── grunt-mocha-cli
├── grunt-nodemon
├── grunt-shell
├── jade
├── mocha
├── redis
├── redis-url
├── should
├── sinon
├── swagger-node-express
└── yaml-config

~/p/retwisn git:dist ❯❯❯ git checkout master

~/p/retwisn git:master ❯❯❯ git status
# On branch master
nothing to commit, working directory clean

~/p/retwisn git:master ❯❯❯ tree node_modules -L 1
node_modules
├── grunt-contrib-clean
├── grunt-nodemon
└── swagger-node-express

虽然/ node_modules被忽略,但是当切换回master时,某些子文件夹被删除了。

1 个答案:

答案 0 :(得分:0)

(从评论中简要扩展)

Git使用.gitignore来了解应该保留哪些未版本控制的文件。但是,如果文件已经版本化,它们就是repo的一部分,而git不会简单地跳过这些文件。在您的情况下,您的dist分支包含不属于主分支的文件,因此当您从dist切换到master时,这些文件将被删除。您找到的解决方案,从dist分支中删除这些文件是正确的:可能是文件在.gitignore中,因为它们不应该是repo的一部分,并且您修复了repo以便这些文件确实是不是它的一部分。