git reset是什么意思--hard origin/master?

Raz*_*aza 190 git version-control

我做了一个git pull并得到一个错误"以下工作树文件将被合并覆盖...请在合并之前移动或删除它们".要解决这个问题,我做了以下几点

git fetch
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

现在,当我做git pull时,它会说明所有内容都是最新的.我想知道当我运行这些命令时到底发生了什么.我知道git fetch从远程仓库获取更改而不将它们合并到我的本地仓库中.

是什么意思git reset --hard origin/master?它是如何工作的?

CB *_*ley 363

git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

说:扔掉我所有的分阶段和未分阶段的变化,忘记我当前本地分支上的所有内容并使其完全相同origin/master.

您可能想在运行命令之前询问此问题.通过使用与"硬重置"中相同的单词来暗示破坏性.

  • 您可以使用`git reset --hard HEAD @ {1}`撤消此移动.`HEAD @ {1}`因情况而异,因此建议您在`git reflog`中搜索它. (8认同)
  • 使用`git fsck --lost-found`仍然可以找到分阶段文件,但它们不会附加到原始文件路径,可能很难排序. (3认同)
  • 请注意,@NilsWerner 用于撤消移动的方法不会恢复已暂存和未暂存的更改。那些已经一去不复返了。 (2认同)
  • 当您(可能是意外地)向本地 master 而不是本地分支提交更改时,将本地 master 分支重置为 origin/master 通常很有用。只需为您的最新提交创建一个本地分支,然后将本地 master 重置为 origin/master 即可。然后,您可以根据需要从 master 合并或变基分支。 (2认同)
  • 大声笑“暗示”是描述这一点的好方法,因为它远非明显或明确 (2认同)

the*_*tor 12

在较新版本的 git (2.23+) 中,您可以使用:

git switch --force-create master origin/master
Run Code Online (Sandbox Code Playgroud)

相关参考文档