我知道它是一个简单的概念,但在研究了几个网站后却没有把握它。
我有一个Ruby On Rails项目并使用git来管理源代码。我有一个生产准备好的快照并初始化git,使它有一个master(使用git init,git add -A和git commit -m)。
现在我想尝试一个新功能,所以我创建了一个名为'test'的分支,使用git checkout -b test
现在,在测试中我尝试使用rails g scaffold UserToken username:string
的新脚手架Scaffold创建了所有ROR文件,我做了一个rake db:migrate来更新数据库。然后我进入rails控制台并测试向db添加记录,然后开始更新其他生成的scaffold模型文件。
午饭后,我回来决定要废弃所有这些。
问题 - (在我自己尝试之后)回到主人的唯一方法是git add -A,git commit -m然后git checkout master?我是否真的需要添加并承诺重新掌握? (这确实有效;但是我不认为我正在抓住git中基本的东西,我会做一些我要废弃的东西)
接下来,如果我做上述事情(我不认为这是正确的)当我回到主人时,我确实看到我的脚手架文件已经消失,因为迁移文件(创建表)和模式。 rb反映了在分支中生成的表不存在。
到目前为止一切顺利:
但是,如果我进入实际的数据库,表IS仍然存在。我在ROR / Git中错过了在分支中测试某些内容然后放弃它的基本原理吗?
更新#1
所以Stash似乎没有帮助: 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中,但是所有的脚手架文件仍然存在(并且不应该)
答案 0 :(得分:4)
这里有两个问题:
首先:如何在不提交正在进行的工作的情况下在分支机构之间移动?
要在分支之间移动而不必提交您的工作,您可以使用model.sel(lapply(dredge(..., evaluate = FALSE), eval), ...)
。
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
分支。未跟踪尚未添加到git add
的文件(包括创建)的更改。因此它们就像通用文件系统的任何其他部分一样,并且将在分支中保持可见。
第二:为什么一个分支中的数据库迁移更改会显示在另一个分支中?
因为数据库管理器不是git
的一部分。无论您修改哪些DBMS,这些更改都会通过DBMS保留。如果要将分支迁移分开,则需要为每个迁移分别设置一个数据库实例。
如果将git
分支想象为文件系统模板,可能会有所帮助。当您切换到另一个分支时,该分支的模板将使用其控制下的任何内容覆盖您现有的文件系统。其他一切都被忽略了。提交时,您正在更新该分支的模板。但是,您的所有工作实际上都是在一个真正的文件系统中完成的。
这意味着您对git
控件之外的文件系统所做的事情仍然可以在所有分支中看到。
答案 1 :(得分:1)
git reset --hard HEAD
会删除所有内容,然后返回测试分支,以便您可以轻松切换回git checkout master
rake db:reset
应该使用数据库中的数据
更新:
如果你真的想摆脱任何事情:
git reset --hard && git clean -dfx
rake db:drop
rake db:create && rake db:migrate