【发布时间】:2016-05-23 21:32:33
【问题描述】:
我知道这是一个简单的概念,但在研究了几个网站后却没有掌握它。
我有一个 Ruby On Rails 项目并使用 git 来管理源代码。我有一个生产就绪快照并初始化 git,使其具有一个 master(使用 git init、git add -A 和 git commit -m)。
现在我想尝试一个新功能,所以我使用 git checkout -b test 创建了一个名为“test”的分支
现在在测试中,我用 rails g scaffold UserToken username:string 尝试了一个新的脚手架
Scaffold 创建了所有 ROR 文件,我执行 rake db:migrate 来更新数据库。然后我进入 Rails 控制台并测试向数据库添加记录,然后开始更新其他生成的脚手架模型文件。
午饭后我回来后决定放弃这一切。
问题 - (在我自己尝试过之后)是回到 master 的唯一方法是 git add -A, git commit -m 然后 git checkout master ?我真的必须添加并承诺才能回到主人身上吗? (这确实有效;但是我认为我没有掌握 git 中的一些基本知识,我会提交一些我将要废弃的东西)
接下来,如果我执行上述操作(我再次认为这是不对的),当我回到 master 时,我确实看到我的脚手架文件以及迁移文件(它创建了表)和架构都消失了。 rb 反映在分支中生成的表不存在。
到目前为止一切顺利:
但是,如果我进入实际数据库,表仍然存在。我在 ROR/Git 中缺少什么基本原理,即在分支中测试某些东西然后放弃它?
更新 #1
所以 Stash 似乎没有帮助: 藏匿无济于事。
Steps:
rails new test_app
git init
git add -A
git commit -m 'initial commit'
git checkout -b newfeatures
rails g scaffold UserToken username:string coin:integer
files get generated...
sqlite3 db/development.sqlite3 show that there is now a table called user_tokens:
git stash save
git checkout master
现在在 Master 中,但是所有的脚手架文件仍然存在(并且不应该)
【问题讨论】:
-
我想你在搜索
git checkout master -f。 -
@ndn 我尝试了 git checkout master -f。我在分支中创建的文件仍然可见并且不应该是正确的?
-
git stash对您不起作用的原因是因为新文件尚未在 git 控制之下。直到通过git add告知git一个文件,它只是一个文件系统人工制品。它还不是任何git分支的一部分,因此不能被git操作。 -
谢谢詹姆斯;是的,我想我已经知道添加必须发生。我原以为 git 可以让我设置一个“master”,然后尝试一堆东西,然后简单地放弃“try”并回到 master,而不必“跟踪 - 添加 - 提交”刚刚没有的东西到 git'甚至不需要成为“历史”的一部分。
-
您可以消除 git 中的死胡同历史,但这也涉及重写在其他分支中所做的所有提交。这不是特别困难,特别是对于一个小项目,但我从来没有发现它值得。您的项目历史包括死胡同,如果它们位于废弃的分支中,您将永远看不到它们。存储空间并不是 git 真正关心的问题,除非您向不再需要的分支添加了一些非常大的文件。但是,您确实需要不时运行
git gc来整理并减少空间消耗。
标签: ruby-on-rails ruby git github