在GitHub上合并了一个拉取请求(PR(,并在远程存储库(origin(上提交了3次之后,我执行了一次拉取以更新我的本地存储库(main(。不知怎么的,事情出了问题,标准CI测试在本地失败了。我重置本地存储库以忽略使用的3个提交
git reset --hard SHA
并在PR之前恢复了本地状态。然后,为了单独检查提交,我使用显式执行了pull
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 pull会有和以前一样的效果(。提前感谢您的任何提示。
简短答案
要放弃任何本地更改并将沙箱置于与原始沙箱相同的状态,请运行:
git fetch
git reset --hard origin/main
(假设:您正在处理分支main
。(
进一步评论
当你不确定沙盒中发生了什么时,你应该使用一个工具来直观地查看你的提交图。有很多图形化的,但这里有一个简单的命令行:
git log --all --oneline --graph --decorate
关键是使其显示图形、分支名称(本地和远程(以及所有分支。
此命令将向您显示远程和本地是如何分化的。然后,您可以决定是保留本地更改并使用合并或重定基准,还是放弃本地更改并进行硬重置。
另一点:我真的不是git pull
的粉丝。事实上,我从来没有用过它。它和git fetch
后面跟着git merge
一样,只是盲目地进行合并,不管这是不是一个好主意。我更喜欢1(获取,2(运行显示图形的git log命令,然后3(决定是否真的要合并、重定基准或重置等等。