远程跟踪名称类似于origin/branch-1
或origin/branch-2
代表您的Git对其他 Git 分支名称的记忆。也就是说,你的 Git 调用了他们的 Git;他们的 Git 说我的branch-2 holds hash ID _____
(用实际的哈希 ID 填写空白),然后你的Git 会在必要时抓取该提交,以便你拥有它,并创建或更新 yourorigin/branch-2
以指向该提交。
假设A
andA
确实是A
and ——即A'
,两个不同的提交,具有不同的哈希 ID,但效果相似),你的工作是说服另一个Git 存储库——一个在上面origin
——将其分支名称设置branch2
为指向这两个中的任何一个所需的哈希。您在Git 中以 name拥有该哈希 ID origin/branch-1
,因此:
git push --force origin origin/branch-1:branch-2
会让你的 Git 调用 Gitorigin
并告诉它:我不在乎你branch2
现在识别哪个提交,现在让它指向哈希 ID _____
!(此处的空白处填写您的 Git 存储在 name 下的哈希 ID origin/branch-1
)。
他们可能服从这个命令,也可能不服从。如果他们不这样做,你就不能像这样从这里修复它:你必须让可以发出此类命令的人来执行此操作。某人可能是您自己但直接登录到服务器,或者可能是具有管理权限的人。1
假设他们确实服从。他们branch-2
当前指向一些提交——也许是你认为的那个,也许是从那时起添加的其他提交。不过,无论哪种方式,他们都服从你的有力命令,现在他们的branch-2
观点指向了对方A
。你的 Git 看到他们确实遵守了,并更新了你的origin/branch-2
,你就得到了你想要的。
小心强制推送操作。请注意,您可以使用--force-with-lease
,但要这样做,您需要在终端上创建一个本地分支名称。该--force-with-lease
操作需要知道要交给他们的哈希 ID,因为它将命令从I don't care___
更改为I think your branch is current ___
; 如果是这样,请将其设置为___
; 无论哪种方式,请告诉我我是否正确以及您是否服从。 为了使所有这些工作,您的 Git 拥有自己的本地名称branch-2
,它可以映射回您的本地名称,origin/branch-2
以便它可以获取两个空白的哈希 ID。
1作为一个诡计,有时如果您无法说服另一个 Git 更新分支名称,您可以告诉另一个 Git完全删除该分支名称。删除它后,您可以告诉其他 Git 创建一个全新的、完全不同的分支名称,只是恰好拼写完全相同。很多时候,一个不允许你强制更新分支名称的 Git 会允许你随意删除和重新创建它。