【问题标题】:How to discard local changes and pull latest from GitHub repository如何丢弃本地更改并从 GitHub 存储库中提取最新信息
【发布时间】:2016-12-11 02:50:45
【问题描述】:

我的机器上有一个目录,用于存储来自 GitHub 的所有项目。我打开了其中一个并在我的机器上进行了本地更改。项目搞砸了,现在我想放弃我所做的所有更改并从存储库中提取最新版本。我对 GitHub 比较陌生,使用 Git Shell。

git pull 命令是否足够? 我是否需要做任何额外的事情来丢弃本地所做的更改? 有人可以帮忙吗?

【问题讨论】:

    标签: git github


    【解决方案1】:

    只是添加其他人所说的我会做以下事情。 如果您已经进行了更改,这意味着您已经在某个时候执行了“git add”, 我会这样做:

    git reset HEAD <file_name>
    

    如果您没有像之前提到的那样声明要更改的文件:

    git checkout . 
    

    【讨论】:

      【解决方案2】:

      git reset 是您想要的,但我将添加一些其他答案未提及的额外内容,您可能会觉得有用。

      git reset --hard HEAD 将您的更改重置回本地存储库跟踪的最后一次提交。如果您进行了提交,但没有将其推送到 GitHub,并且也想将其丢弃,请参阅 @absiddiqueLive 的回答。

      git clean -df 将丢弃您可能添加的任何新文件或目录,以防您想丢弃它们。如果您没有添加任何内容,则不必运行它。

      git pull(或者如果你在 GitHub 客户端上使用 git shell)git sync 将从 GitHub 获取新的更改。

      将来修改: 前一周我更新了我的 git shell,并注意到git sync 命令不再默认定义。作为记录,在 bash 中输入 git sync 等同于 git pull &amp;&amp; git push。我发现它仍然有用,所以它在我的 bashrc 中。

      【讨论】:

      • 这些都不适合我,我明白了:请在合并之前移动或删除它们
      • @StepanYakovenko 听起来您的存储库正在尝试合并,如果您键入 git status,则应该指出这一点。看看这个问题:stackoverflow.com/questions/36039687/…
      • 如果还有目录要被吹走,你需要做git clean -fd
      【解决方案3】:

      除了上面的答案,总有焦土之法。

      rm -R <folder>
      

      在 Windows shell 中,命令是:

      rd /s <folder>
      

      然后您可以再次签出该项目:

      git clone -v <repository URL> 
      

      这肯定会删除任何本地更改并从远程存储库中提取最新的。小心 rm -R 因为如果你输入错误的路径,它会删除你的好数据。例如,绝对不这样做:

      rm -R /
      

      edit:修正拼写并添加重点。

      【讨论】:

        【解决方案4】:

        推翻旧的回购。 git push -u origin master --force

        我认为--force 也适用于拉动。

        【讨论】:

        • 这与 OP 想要做的完全相反。
        • “我认为 --force 也适用于拉动” ...那不行吗?
        • git pullgit fetch 后跟git merge FETCH_HEAD 的简写。 fetch 有一个 --force 选项,但它与覆盖当前分支中的更改没有任何关系。因此,虽然从技术上讲 git pull --force 是合法的,但它并没有像您认为的那样做。
        【解决方案5】:

        运行以下命令

        git log
        

        从这里你会得到你的最后一个推送提交哈希键

        git reset --hard <your commit hash key>
        

        【讨论】:

          【解决方案6】:

          如果您已经提交了更改,则必须提交给revert changes

          如果您还没有提交,只需进行干净的结帐git checkout .

          【讨论】:

          • 小心还原。简单地重置通常会更好。 Revert 创建一个新的提交,它删除或添加回之前提交中的内容。但是,当您稍后尝试与另一个分支合并时,这些删除和“添加回”可能会导致问题,因为它们被视为更改。例如,如果您不小心在分支 A 中进行了更改,则还原更改然后在分支 B 中进行相同的更改,推送分支 B 后跟分支 A,分支 A 最终可能会删除您在分支 B 中所做的更改。跨度>
          • @JDB 啊,是的,谢谢 - 在我需要的极少数情况下,我自己使用重置,只是在我写答案时将它与还原混淆
          猜你喜欢
          • 2011-09-03
          • 1970-01-01
          • 2010-11-29
          • 2011-09-11
          • 2010-10-26
          • 2021-01-12
          • 1970-01-01
          相关资源
          最近更新 更多