Git分支工作流程

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

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

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

现在,在测试中,我尝试使用rails g scaffold UserToken username:string的新脚手架

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

午餐后,我回来决定要废除所有这一切。

问题 - (自己尝试后)是回到主要的唯一方法是git添加-A,git commit -m然后git checkout master? 我真的必须添加并承诺回到主人身边吗? (这确实有效;但是我不认为我在git中掌握了一些基本的东西,我会对我将要废弃的东西做一个提交)

接下来,如果我做了上述(再次我不认为这是正确的),当我回到主人的时候,我发现我的脚手架文件已经消失,迁移文件(创建表)和schema.rb反映了在分支中生成的表不存在。

到现在为止还挺好:

但是,如果我进入实际的数据库,表格仍然存在。 ROR / Git在分支中测试某些东西然后放弃它时缺少什么基本的基础知识?

更新#1

所以藏匿似乎没有帮助:藏匿不起作用。

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 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


这里有两个问题:

第一:如何在不进行工作的情况下在分支机构之间移动?

要在分支之间移动而不必提交你的工作,你可以使用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控制之外的文件系统所做的事情在所有分支中都是可见的。

链接地址: http://www.djcxy.com/p/18925.html

上一篇: Git Branch Workflow

下一篇: Commit and push a Git repository using Rails