有两个分支master
和dist
,/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时,某些子文件夹被删除了。
答案 0 :(得分:0)
(从评论中简要扩展)
Git使用.gitignore
来了解应该保留哪些未版本控制的文件。但是,如果文件已经版本化,它们就是repo的一部分,而git不会简单地跳过这些文件。在您的情况下,您的dist分支包含不属于主分支的文件,因此当您从dist切换到master时,这些文件将被删除。您找到的解决方案,从dist分支中删除这些文件是正确的:可能是文件在.gitignore
中,因为它们不应该是repo的一部分,并且您修复了repo以便这些文件确实是不是它的一部分。