如何完全放弃对主题分支所做的更改

时间:2015-12-16 10:24:34

标签: ruby-on-rails git reset

在主题分支中,我错误地复制了模型和迁移(以前在主分支中创建):

rails generate model User name:string email:string 
bundle exec rake db:migrate

已创建重复模型但迁移失败,因为数据库已有users表。按照how to discard git local branch changes?中的说明,我尝试使用git reset --hard放弃所有未提交的更改,但git status仍然显示未跟踪文件的存在:

# Untracked files:
# (use "git add <file>..." to include in what will be committed)

    app/models/user.rb
    db/migrate/
    test/fixtures/users.yml
    test/models/user_test.rb

# nothing added to commit but untracked files present (use "git add" to track)

为什么git reset --hard会保留这些文件?我该怎么做才能安全地删除这些文件,以便将主题分支完全重置为上次提交? rails destroy model User会适合我吗?

4 个答案:

答案 0 :(得分:4)

正如@HBHB已经正确地说:git reset --hard只重置跟踪的文件。

但是,您也可以通过调用git clean -df使用git删除未跟踪的文件。 -d也会删除未跟踪的目录,并且必须提供-f(强制),否则Git不会删除这些文件。

答案 1 :(得分:1)

git不会跟踪这些文件(请注意它们列在git status输出中的“未跟踪文件”下)。 git reset --hard删除git跟踪的所有文件中的更改。来自git reset --hard的{​​{3}}:

  

重置索引和工作树。自提交以来对工作树中跟踪文件的任何更改都将被丢弃。

要摆脱它们,只需删除它们:

rm app/models/user.rb
rm db/migrate/
rm test/fixtures/users.yml
rm test/models/user_test.rb

答案 2 :(得分:1)

git clean -f -d 

删除未跟踪的文件是最安全的选择。您还可以查看this answer

答案 3 :(得分:0)

我总是使用以下命令:

git reset --hard HEAD~1

  

rails git:(master)✗git reset --hard HEAD〜1 HEAD现在位于   45e2c462跳过Webpack的管道