在我的本地仓库副本上运行 git reset --hard 时出现奇怪的行为

mrj*_*per 6 git

TLDR:执行 git reset --hard origin/mybranch 将本地存储库重置为更早的版本而不是最新版本。

开发分支看起来像这样:

在此处输入图片说明

我认为这最好用一个例子来解释

[myusername@myhost myapp]$ git branch
* dev

[myusername@myhost myapp]$ git pull origin dev
From bitbucket.org:
 * branch            dev        -> FETCH_HEAD
Already up-to-date.

[myusername@myhost myapp]$ git reset --hard origin/dev
HEAD is now at 2be5b0e Merged in mybranch (pull request #57)

[myusername@myhost myapp]$ git pull origin dev
From github.com:myusername/myapp
 * branch            dev        -> FETCH_HEAD
Updating 2be5b0e..2cdc555
Fast-forward
--file list here--
 19 files changed, 324 insertions(+), 196 deletions(-)

[myusername@myhost myapp]$ git log
commit 2cdc555dde1ef7ef187756036bb2d19dacae0c26
Merge: 6c9399d fc7d29f
Author: First Last <first.last@myhost.com>
Date:   Thu Jun 4 00:53:16 2020 +0000

    Merged in mybranch (pull request #81)

[myusername@myhost myappc]$ git reset --hard origin/dev
HEAD is now at 2be5b0e Merged in mybranch (pull request #57)
Run Code Online (Sandbox Code Playgroud)

我原以为执行 git reset --hard origin/dev 会将 repo 重置为最后一次提交(即拉取请求 #81)?

我还从文件系统中删除了所有文件和文件夹(包括 .git*),并在上周重新克隆了 repo。它有一段时间表现正常,这又发生了。

Elp*_*Kay 3

[myusername@myhost myapp]$ git pull origin dev
From bitbucket.org:
 * branch            dev        -> FETCH_HEAD
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)

这里origin/dev就不更新了。看来remote.origin.fetch是没设置好。尝试git -c remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* pull origin dev看看是否origin/dev更新。如果是,请运行git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*,以便从那时起origin/foo更新。git pull origin foo

旁注:在 Windows 的 git-bash 中,我经历过虽然没有打印在 的日志中,origin/foo但确实得到了更新,因此日志并不完全负责。foo -> origin/foogit pull origin foo