将本地代码库分支重置为与远程代码库HEAD完全一致

5624

如何将本地分支重置为与远程仓库中的分支完全相同?

我试过:

git reset --hard HEAD

但是git status命令显示我修改了文件:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

17
根据 git status 的输出,你的第二个命令 git reset --hard HEAD 失败了。不过你没有粘贴它的输出。→ 问题不完整。 - Robert Siemer
5
你在混淆两个问题:1)如何将本地分支重置到与远程相同的点;2)如何清除暂存区(以及可能的工作目录),以便git status显示“nothing to commit, working directory clean”。请具体说明你需要的是哪一个。 - Robert Siemer
3
这回答是否解决了你的问题?如何强制“git pull”覆盖本地文件? - Henke
你救了我的命...爱你...我试图检出另一个空的分支...但是没有成功...这时我的一周工作都没了...而且我无法按时完成任务。谢天谢地! - Rajib
git reset --hard FETCH_HEAD 对我来说很有效。我在变基之后没有推送。 - undefined
显示剩余2条评论
27个回答

8
2023年简单解决方案:
git fetch
git reset --hard @{u}

重置到origin/HEAD并不总是有效的,因为它不一定是当前分支的最新提交。

太简单了。完美地解决了我本地分支与重新基于(并压缩)的源代码的重置问题。 - undefined

6

首先,使用 git status 检查是否有本地更改。 如果有,请将它们存储起来。

然后执行:

git fetch
git reset --hard @{push}

它将重置当前本地分支为与用于git push相同的远程分支。当配置了git config push.default current时,这尤其有用。例如,当您的分支是abc而远程分支是origin时,它将将其重置为origin/abc

有关@{push}的更多详细信息,请参见Git修订版


这真的很棒。我将使用@{push}来更改/添加一堆别名。 - Snekse

4

我见过的在所有情况下都有效的唯一解决方法是删除并重新克隆。也许还有其他方法,但显然这种方法不会留下旧状态的机会,所以我更喜欢它。如果你经常在git中搞砸事情,可以设置以下Bash单行代码作为宏:

REPO_PATH=$(pwd) && GIT_URL=$(git config --get remote.origin.url) && cd .. && rm -rf $REPO_PATH && git clone --recursive $GIT_URL $REPO_PATH && cd $REPO_PATH

* 假设您的 .git 文件没有损坏

6
如果你想要确保的话,你也可以重新安装你的操作系统! - Sebastian Scholle

4

你是否因为疏忽忘记创建功能分支,并错误地直接提交到主干(master)?

现在,你可以创建功能分支并将主干(master)设置回来,而不会影响工作树(本地文件系统),以避免触发构建、测试和文件锁定等问题:

git checkout -b feature-branch
git branch -f master origin/master

1
  • 因为有未提交的更改,所以会抛出错误。
  1. 因此,您可以使用 git stash 命令。
  • 这将把未提交的更改保存起来,以便以后使用,并从您的工作副本中还原它们。
  • 如果您想再次使用这些更改,可以使用 git stash apply 命令。
  1. 然后,您可以使用 git pull 命令。
  • 这将从远程仓库获取最新的代码。

如果存在冲突的未推送提交,则无法工作(错误:“致命:拒绝合并不相关的历史记录”)。 - nh43de

0
git fetch origin
git checkout main
git reset --hard origin/main
# Local `master` branch is now up to date with remote `main`

-2

如果您不介意保存本地更改,同时又想更新存储库以匹配 origin/HEAD,则可以简单地将本地更改存储并拉取:

git stash
git pull

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接