gpt4 book ai didi

git - 如何推送 "git replace --graft"

转载 作者:IT王子 更新时间:2023-10-29 01:02:42 28 4
gpt4 key购买 nike

我使用 git replace --graft 来记录一个版本实际上是两个版本之间的(手动执行的) merge :

 git replace --graft <merged-version> <predecessor-version> <version-merged-from>

这对我的(本地、私有(private))存储库进行了更改。

我现在想通过将其“推送”到我们的共享存储库(在 Github 上,它发生了),让我团队的其他成员可以使用该更改。我怎么做?一个简单的 git push 似乎没有效果。

最佳答案

refs/replace/ 内部存在移植物等级制度。 (或者,最好说“它们的存在归功于”此类引用。)要将它们从一个存储库转移到另一个存储库,您必须推送或获取此类引用。

例如:

git push origin refs/replace/5c714d7798d1dc9c18d194fa6448680515c0ccdb

提交时5c714d7798d1dc9c18d194fa6448680515c0ccdb有一个替换(在我的例子中,替换是新的提交对象 ceba978ce6dad3b52d12134f4ef2720c5f3a9002 ,即 Git 通常不会“看到” 5c714d7 ,而是寻找替换对象 ceba978)。

推送所有替换:

git push origin 'refs/replace/*:refs/replace/*'

(有时需要引号来防止 shell 破坏星号;确切地何时使用引号以及使用哪种种类,在某种程度上取决于 shell,尽管单引号和双引号都适用于所有 Unix-y shell)。

获取替换的注意事项

如果某些远程 R 有替换项,并且您想将它们的所有替换项都放入您的存储库中,请使用 git fetch <em>R</em> 'refs/replace/*:refs/replace/*' (或者如果您希望它们的替换覆盖您已经拥有的任何前缀,则使用前缀 + 相同)。您可以为任何给定的存储库和远程自动执行此操作。例如,如果您运行 git config --edit , 你会发现你现有的 origin Remote 有几个看起来像这样的设置:

[remote "origin"]
url = ...
fetch = +refs/heads/*:refs/remotes/origin/*

只需添加一行:

    fetch = refs/replace/*:refs/replace/*

或:

    fetch = +refs/replace/*:refs/replace/*

让你的 Git 带来他们 Git 的 refs/replace/* . (注意:这里不需要引号,因为 shell 不会处理这一行。)前导加号与通常的含义相同:1 没有它,如果您已经 一些引用,你保留你的而忽略他们的。使用前导加号,您丢弃您的并使用他们的。与标签一样,如果您的引用和他们的引用已经匹配,那么您是保留您的还是用他们的替换都没有关系;仅当您对某些引用应命名的对象有不同的想法时,这才重要。


1事实上,前导加号的“通常含义”取决于引用是否应该移动,例如分支名称,或者 应该移动,例如标签名称。加号设置强制标志,即“始终采用建议的新设置”,但对于分支名称(预计将“向前推进”),如果 且仅当 时,允许在没有强制的情况下进行更新这是一个“前进”(或“快进”)的举动。 Git 最初也将此规则应用于其他引用,如标签,但 Git 人员在 Git 1.8.2 中修复了它。我不清楚哪些 Git 规则适用于 refs/replace/引用,它们不应该移动,但不会像标签那样被特殊对待。

关于git - 如何推送 "git replace --graft",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42489421/

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