我怎样才能克隆到 git 存储库中的特定标签,而不包括该标签后面的历史记录或提交?
How can I clone up to a specific tag in a git repository and not include history or commits following that tag?
我已经阅读了数十个措辞相似的问题,其中 none 似乎符合我的需要。我有一个包含许多标签和提交的存储库。我想回到几年前的 commit/tag 并克隆该标签和导致该标签的历史,不再进一步。
这是一个简化的表示:
A - B - C - D - H - I - ... ZZZ
\ / \ /
E - F - G J - K
我想克隆存储库,但只能克隆到提交 H,导致存储库显示如下:
A - B - C - D - H
\ /
E - F - G
我知道我正在计划的行动具有破坏性。在弄乱它之前,我会备份现有的 repo。我绝对不打算将 I onward 包含在生成的克隆中。
您将不得不克隆比您想要的更多的历史记录。但是一旦拥有它,您就可以将历史截断为您选择的标签。从克隆存储库开始:
git clone --no-tags someurl myrepo
现在,将存储库的标头重置为您选择的引用:
cd myrepo
git reset --hard ref-of-interest
你应该得到你想要的。
请注意,我在这里明确克隆了 --no-tags
,因此标签在本地不可用。如果您确实想将历史截断到特定标签,您可以 (a) 不使用 --no-tags
选项克隆,或 (b) git reset --hard
到显式提交 ID,而不是标签名称。
我已经阅读了数十个措辞相似的问题,其中 none 似乎符合我的需要。我有一个包含许多标签和提交的存储库。我想回到几年前的 commit/tag 并克隆该标签和导致该标签的历史,不再进一步。
这是一个简化的表示:
A - B - C - D - H - I - ... ZZZ
\ / \ /
E - F - G J - K
我想克隆存储库,但只能克隆到提交 H,导致存储库显示如下:
A - B - C - D - H
\ /
E - F - G
我知道我正在计划的行动具有破坏性。在弄乱它之前,我会备份现有的 repo。我绝对不打算将 I onward 包含在生成的克隆中。
您将不得不克隆比您想要的更多的历史记录。但是一旦拥有它,您就可以将历史截断为您选择的标签。从克隆存储库开始:
git clone --no-tags someurl myrepo
现在,将存储库的标头重置为您选择的引用:
cd myrepo
git reset --hard ref-of-interest
你应该得到你想要的。
请注意,我在这里明确克隆了 --no-tags
,因此标签在本地不可用。如果您确实想将历史截断到特定标签,您可以 (a) 不使用 --no-tags
选项克隆,或 (b) git reset --hard
到显式提交 ID,而不是标签名称。