2017-10-13 127 views
0

我删除了2个迁移文件,提交并推送了更改。现在,当我尝试运行artisan migrate命令我得到一个错误:Laravel 4删除迁移

[InvalidArgumentException] 
There are no commands defined in the "xyz" namespace. 

我也不能这样做,因为artisan migration:rollback我得到一个错误

{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalThrowableError","message":"Class 'ClassNameXYZ' not found","file":"....vendor\/laravel\/framework\/src\/Illuminate\/Database\/Migrations\/Migrator.php","line":301}} 

所以现在我试图运行composer dump-autoload和所有artisan关于清除缓存的命令,但是当我尝试迁移时,我会得到同样的结果。

我不能删除数据库,因为这需要在生产分支上合并,所以如果我这样离开它并删除并重新设置数据库,它只会在生产服务器上中断。

我试着手动添加已删除的迁移,然后composer dump-autoload,但当我试图回滚时仍然收到相同的错误。

我也想取回先前提交回删除迁移,而这样做:

git checkout __COMMIT__ __FILENAME__ 

,但我得到两个错误,或者:

error: pathspec '__FILENAME__' did not match any file(s) known to git. 

或:

fatal: __FILENAME__: '__FILENAME__' is outside repository 

我该如何解决这个问题?

编辑

我想过做一个git reset但遗憾的是在问题提交是最后一个了。最后一次提交是不再存在的分支的合并,所以如果我重置它,我将失去与最后一个分支合并的更改。

回答

0

我发现了一个错误。这是由于迁移调用自定义的artisan命令,该命令的名称与我上次执行更改时的名称不同。

我仍然不知道为什么git的问题发生,但现在还不是至关重要的。

0

我想你应该遵循下面的评论:

如果你删除一个迁移类文件(XYZ),只需从迁移表中删除记录。并在运行命令php artisan migrate后。

+0

如果我这样做,我会做同样的生产服务器,在这一点上是不是一种选择 – Norgul

+0

@Norgul上:因为这个类在迁移表中添加,可能是每次影响 –