如何同步本地和远程存储库

How to sync local and remote repositories

在 GitHub 上合并拉取请求 (PR) 并在远程存储库 (origin) 上进行 3 次提交后,我执行了拉取以更新我的本地存储库 (main)。不知何故出了问题,标准 CI 测试在本地失败。我使用

重置本地存储库以忽略 3 次提交
git reset --hard SHA

重新回到PR前的本地状态。然后,为了单独检查提交,我使用

显式地执行了拉取
 git fetch origin
 git merge SHA-commit1
 git merge SHA-commit2
 git merge SHA-commit3

并达到与远程相同的(功能)状态,所有 CI 测试都正常。

为了完整起见:我在远程端还有另一个 PR 提案,尚未合并(包含一些错误)。

尽管我的本地和远程存储库现在几乎相同,但命令

 git status origin

显示

On branch main
Your branch and 'origin/main' have diverged,
and have 3 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

我想知道是否有一种简单的方法来同步这两个存储库(恐怕建议的 git 拉取与以前的效果相同)。预先感谢您的任何提示。

简答

要放弃任何本地更改并将您的沙箱置于与原始状态相同的状态,运行:

git fetch
git reset --hard origin/main

(假设:您正在分支 main 上工作。)

进一步评论

当您不确定沙箱中发生了什么时,您应该使用一种工具来直观地查看您的提交图。有很多图形化的,但这里有一个简单的命令行:

git log --all --oneline --graph --decorate

关键是让它显示图形、分支名称(本地和远程)和所有分支。

此命令将准确显示远程和本地的差异。然后,您可以决定是要保留本地更改并使用合并或变基,还是放弃本地更改并使用硬重置。

另注:我真的不是git pull的粉丝。事实上,我从不使用它。它与 git fetch 后跟 git merge 相同,但盲目地合并是否是个好主意。我更喜欢 1) 获取,2) 运行 git 显示图形的日志命令,然后 3) 决定我是否真的想要合并、变基、重置或诸如此类的东西。