git - 强制 git pull 通过丢弃所有本地提交来解决分歧?
问题描述
问题
我有一个包含 3 个提交的本地仓库:
A -> B -> C
远程仓库还有另外 3 个提交:
A -> B -> D
如何git pull
通过丢弃所有本地提交来解决分歧?之后的本地仓库git pull --some-magic
应该是:
A -> B -> D
请注意,这git reset HEAD~1 --hard
不起作用,因为我的脚本不知道必须还原多少次提交以避免冲突。
为什么我需要这个
我正在编写一个脚本来在 github 和 gitlab 存储库之间进行同步。其中之一是只读镜像。我的脚本只是尝试git pull --force
从 origin1git push
到 origin2。
但是,如果有人更改了 的历史记录origin1
,git pull
我的脚本中的 将失败并显示错误消息。解决问题的唯一方法是删除整个本地存储库,然后git clone
从拉伸中执行。既浪费带宽又慢!
解决方案
你不应该这样做git pull
,因为git pull
它是为不同的目的而设计的:结合工作。但是你不想合并工作;你想反映他们最新的提交。
为此,只需运行git fetch
以获取他们的最新提交,然后使用git reset --hard
将您的本地分支重置为他们的最新提交。唯一棘手的部分是git reset --hard
要求他们最新提交的身份。这对您可用:如果您知道您的本地分支名称是main
因为他们的分支名称是main
,那么您自己的 Git 将更新您的origin/main
,因此您可以使用git reset --hard origin/main
.
或者,您可以使用当前分支的上游设置:
git reset --hard @{upstream}
请注意,这将丢弃已提交和未提交的工作,因此请小心处理。
推荐阅读
- php - 自定义 Wordpress WooCommerce 结帐页面和付款处理方式
- html - 使用链接使成排的框可点击
- css - React Native 防止文本增加容器宽度
- c# - Windows 服务和 SSL 上的自托管 WebAPI
- node.js - 如何在 Neutralino 上设置节点服务器?
- python - 如何在kivy python中自动化轮播
- c# - .NET Core 服务与旧版 WCF 客户端的兼容性
- rust - 在当前范围内没有为 struct `File` 找到名为 `read_to_string` 的方法
- ios - 在哪里为使用 SwiftUI 的用户初始化 sqlite 数据库?
- python - Pyflink:组窗口需要一个时间属性来在流环境中进行分组