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

标签 git

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

开发分支看起来像这样:

enter image description here

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

[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)

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

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

最佳答案

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

这里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/foo 确实得到更新没有打印在git pull origin foo的日志中,所以日志并不完全负责。

关于git - 在我的本地仓库副本上运行 git reset --hard 时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62206710/

相关文章:

Git:看似简单的分支题

git - 将 2 提交压缩为 1

git - Beyond Compare 2 作为 Git Mergetool

git - git update-index --skip-worktree 会影响上游仓库吗?

git - 为 Git Push 分配远程

git - SSH 是有状态的还是无状态的?

git - ubuntu中的bash函数

git - 我怎样才能推送到一个git bundle

Git + SoA,一个仓库还是多个仓库?

git - 我应该 fork 并克隆我的存储库,还是只克隆原始存储库?