【问题标题】:why git reset is not working?为什么 git reset 不起作用?
【发布时间】:2017-02-10 17:39:57
【问题描述】:

这太有问题了,我刚刚 git pull 一些东西,然后它说有本地更改....我什么都没改变...我尝试重置但它没有用...有人帮忙吗?

MacBook-Pro$ git reset --hard
HEAD is now at b89fcff the latest code in AWS to identify all difference and keep track
MacBook-Pro$ git checkout dev1.1
error: Your local changes to the following files would be overwritten by checkout:
    OUTPUT_RESULTS_DIR/equity.csv
Please commit your changes or stash them before you switch branches.
Aborting

【问题讨论】:

  • 试试git reset --hard . 哪里。指示您当前的目录。我怀疑位于子文件夹中的Equity.csv 没有被清除。
  • “我刚刚 git pull 了一些东西,然后它说有局部变化”——这种行为的一个常见原因是存在混合换行符(LFCR LF) 在同一个文件中。在此处阅读更多信息:git-scm.com/book/en/v2/… 了解如何修复它。
  • 这个文件有可能被标记为skip-worktree,见stackoverflow.com/a/11131211/3906760
  • 一般来说,git status 的输出可以真正消除这些情况下的困惑。您应该始终自己检查它,并考虑将它也包含在您的问题中,因为它提供了一些关于情况的额外信息,否则必须猜测。

标签: git git-reset


【解决方案1】:

执行git reset --hard 只会影响那些文件,Git 知道; Git 当前跟踪的那些。

当您将git status 的输出作为参考时,git reset --hard 影响的只是那些 Git 检测到已暂存或未暂存的修改的文件。未跟踪部分中列出的文件不受影响,因此“Git 不知道”。

因此,在您的情况下,您有一个未跟踪的文件 OUTPUT_RESULTS_DIR/equity.csv。做git reset --hard 不会影响它,所以它会留在原处。但是,您尝试签出的分支dev1.1 显然包含该文件。因此,在这里,Git 将通过阻止您签出来防止您意外丢失本地文件的内容。

此时,您可以重命名文件,以便您仍然可以使用它,但在签出另一个分支时不会导致冲突。你也可以使用git checkout dev1.1 --force 来强制 Git 检查分支,忽略任何冲突。但请注意,此操作无法撤消,因此请小心操作。

【讨论】:

    【解决方案2】:

    如果您确定没有您关心的更改,则没有理由尝试提交或存储(甚至重置)。您应该能够按如下方式强制结帐:

    git checkout --force dev1.1
    

    --force 选项会导致 Git 放弃任何本地更改,而不是失败。请确保这确实是您想要做的。

    【讨论】:

      【解决方案3】:

      尝试隐藏它也许会奏效。 :

      git stash save
      

      【讨论】:

      • 如果git reset --hard 没有清除它,它也不会被包含在存储中。
      猜你喜欢
      • 1970-01-01
      • 2013-07-19
      • 2021-07-04
      • 2019-12-31
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 2016-11-05
      • 2017-03-09
      相关资源
      最近更新 更多