gpt4 book ai didi

git - 强制 git pull 通过丢弃所有本地提交来解决分歧?

转载 作者:行者123 更新时间:2023-12-05 01:07:41 25 4
gpt4 key购买 nike

问题

我有一个包含 3 次提交的本地仓库:

A -> B -> C

远程仓库还有另外 3 个提交:

A -> B -> D

如何让 git pull 通过丢弃所有本地提交来解决分歧? git pull --some-magic 之后的本地仓库应该是:

A -> B -> D

请注意,git reset HEAD~1 --hard 不起作用,因为我的脚本不知道必须还原多少次提交才能避免冲突。

为什么我需要这个

我正在编写一个脚本来在 github 和 gitlab 存储库之间进行同步。其中之一是只读镜像。我的脚本只是从 origin1 尝试 git pull --forcegit push 到 origin2。

但是,如果有人更改了 origin1 的历史记录,我的脚本中的 git pull 将失败并显示错误消息。解决问题的唯一方法是删除整个本地存储库,然后执行 git clone from stretch。既浪费带宽又慢!

最佳答案

您不应该使用 git pull 来执行此操作,因为 git pull 的设计目的不同: merge 工作。但是你不想想要 merge 工作;你想反射(reflect)他们最近的提交

为此,只需运行 git fetch 以获取他们的最新提交,然后使用 git reset --hard 将您的本地分支重置为他们的最新提交。唯一棘手的部分是 git reset --hard 要求他们最新提交的身份。这对您可用:如果您知道您的本地分支名称是 main 因为他们的分支名称是 main,那么您自己的 Git 将更新您的 origin/main,所以你可以使用 git reset --hard origin/main.

或者,您可以使用当前分支的 upstream 设置:

git reset --hard @{upstream}

请注意,这将丢弃已提交和未提交的工作,因此请小心处理。

关于git - 强制 git pull 通过丢弃所有本地提交来解决分歧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67054889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com