Ruby on Rails - Git Branch Workflow



我知道这是一个简单的概念,但在研究了几个网站后并没有掌握它。

我有一个Ruby On Rails项目,并使用git来管理源代码。 我有一个生产就绪快照并初始化 git,以便它有一个主节点(使用 git init、git add -A 和 git commit -m(。

现在我想尝试一个新功能,所以我使用 git checkout -b test 创建了一个名为"test"的分支

现在在测试中,我尝试了一个带有轨道 g 脚手架的新脚手架 用户令牌用户名:字符串

脚手架创建了所有 ROR 文件,我做了一个耙子 db:migrate 来更新数据库。 然后,我进入 rails 控制台并测试将记录添加到数据库,然后开始更新其他生成的脚手架模型文件。

午饭后,我回来决定要放弃这一切。

问题 - (在自己尝试过之后(是回到 master 的唯一方法是 git add -A,git commit -m 然后 git checkout master ? 我真的必须添加并承诺才能回到主控吗?(这确实有效;但是我认为我没有掌握 git 中的基本内容,我会对我将要废弃的东西进行提交(

接下来,如果我执行上述操作(再次我认为这是不对的(,当我回到主数据库时,我确实看到我的脚手架文件和迁移文件(创建表(一样消失了,并且 schema.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 stash

git stash help
Usage: git stash list [<options>]
   or: git stash show [<stash>]
   or: git stash drop [-q|--quiet] [<stash>]
   or: git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
   or: git stash branch <branchname> [<stash>]
   or: git stash [save [--patch] [-k|--[no-]keep-index] [-q|--quiet] [<message>]]
   or: git stash clear

一旦你把你的工作藏起来,你就可以在分支之间切换而没有问题。请注意,要存储的文件必须首先通过 git add 添加到git分支中。 不会跟踪对尚未添加到git的文件所做的更改(包括创建(。因此,它们就像通用文件系统的任何其他部分一样,并且在分支中保持可见

第二:为什么我的数据库迁移更改在一个分支中显示在另一个分支中?

因为数据库管理器不是 git 的一部分。 无论您要修改什么 DBMS,这些更改都会通过 DBMS 持久化。 如果要使分支迁移保持独立,则需要为每个分支迁移提供一个单独的数据库实例。

如果您将git分支想象为文件系统模板,这可能会有所帮助。 当您切换到另一个分支时,该分支的模板会用其控制下的任何内容覆盖您现有的文件系统。 其他一切都被忽略。 提交时,您将更新该分支的模板。但是,您的所有工作实际上都是在一个真正的文件系统中完成的。

这意味着你对文件系统所做的不受git控制的事情在所有分支中仍然可见。

git reset --hard HEAD删除

所有内容并在testbranch中返回,因此您可以轻松地切换回git checkout master

rake db:reset应该对数据库中的数据解决问题


更新:

如果你真的想摆脱任何东西:

git reset --hard && git clean -dfx rake db:drop rake db:create && rake db:migrate

最新更新