【问题标题】:How to completely discard changes made on a topic branch如何完全放弃对主题分支所做的更改
【发布时间】:2015-12-16 10:24:33
【问题描述】:

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

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 适合我吗?

【问题讨论】:

标签: ruby-on-rails git reset


【解决方案1】:

正如@HBHB 已经正确说过的那样:git reset --hard 重置刚刚跟踪的文件。

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

【讨论】:

  • 谢谢@RajarshiDas :)
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:
    git clean -f -d 
    

    删除未跟踪的文件是最安全的选择。进一步你可以看看this answer

    【讨论】:

      【解决方案4】:

      我总是使用这个命令:

      git reset --hard HEAD~1
      

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

      【讨论】:

        猜你喜欢
        • 2011-06-17
        • 1970-01-01
        • 2013-08-07
        • 1970-01-01
        • 2011-01-07
        • 1970-01-01
        • 1970-01-01
        • 2018-11-02
        • 2020-04-19
        相关资源
        最近更新 更多