如何使用以前的Git checkout干净利落地重新启动,在Rails 3中使用正确的文件和迁移

Say*_*nee 2 migration git ruby-on-rails-3

我可以采取哪些步骤从之前完美运行的Git结帐树中彻底重新启动所有旧文件(删除新文件),正确迁移(删除新表/迁移)等等?

这是情况.我正在学习Rails,有几次我搞砸了,因此,我做了git checkout -f(没有提交任何东西)从完美的代码开始干净利落.但是,我发现新创建的文件仍然存在,我不得不手动删除它们,并且rake db:migrate错误地说表已经存在.

以下是我的一些错误:

Sayanee:depot sweska$ rake db:migrate
(in /Applications/XAMPP/xamppfiles/htdocs/rails_projects/TUTORIALS/depot)
==  CreateUsers: migrating ====================================================
-- create_table(:users)
rake aborted!
An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: table "users" already exists: CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "hashed_password" varchar(255), "salt" varchar(255), "created_at" datetime, "updated_at" datetime) 

(See full trace by running task with --trace)
Sayanee:depot sweska$ rake db:reset
(in /Applications/XAMPP/xamppfiles/htdocs/rails_projects/TUTORIALS/depot)
db/test.sqlite3 already exists
db/test.sqlite3 already exists
db/development.sqlite3 already exists
-- create_table("carts", {:force=>true})
   -> 0.0033s
-- create_table("line_items", {:force=>true})
   -> 0.0172s
-- create_table("orders", {:force=>true})
   -> 0.0032s
-- create_table("products", {:force=>true})
   -> 0.0030s
-- create_table("users", {:force=>true})
   -> 0.0049s
-- initialize_schema_migrations_table()
   -> 0.0095s
-- assume_migrated_upto_version(20110522103119, "db/migrate")
   -> 0.0153s
You have 1 pending migrations:
  20110523004950 CreateUsers
Run "rake db:migrate" to update your database then try again.
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  1. 使用哪个git命令来彻底恢复到之前的提交?
  2. 我怎么知道创建的新文件是什么,以便我可以删除它们?或者我应该提交当前不工作的代码然后转回去?
  3. 当我不知道要使用多少步骤时,我怎样才能彻底转移到以前的迁移rake db:rollback STEP=3?或者是否有任何命令git status可以列出我以前的所有迁移及其名称?
  4. 我在回到之前的工作git提交并从那里重新开始时,我会错过任何我应该考虑的事项吗?

非常感谢!有了答案,我会列出这里的步骤!

从上一个git checkout创建一个干净的开始的步骤:

  1. git reset --hard HEAD ^ #hard reset
  2. git clean -f #delete所有新文件
  3. rake db:migrate

Moh*_*our 7

您可以随时将提交重置为上一次.

git reset --hard HEAD^
Run Code Online (Sandbox Code Playgroud)

记住重置硬重置索引和工作树,因此任何跟踪的文件都将被丢弃.如果您不想丢弃任何内容,则可以执行--soft reset.

有关更多信息,git重置文档有一些写得很好的例子:

http://git-scm.com/docs/git-reset

由于rails应用程序会创建sqlite数据库文件,因此将当前树重置为先前状态不会删除未跟踪的文件.要删除那些未跟踪的文件(您的sqlite数据库),您可以删除该sqlite数据库文件.如果要清理整个树,可以运行:

git clean -f
Run Code Online (Sandbox Code Playgroud)

通过重置和清理您的git工作树,它将返回到您最初在该特定提交时检出的状态.

希望有所帮助!