我只是尝试删除特定提交背后的历史记录。我在Git: how to remove history before a specific commit找到了以下命令:
git fast-export master~5..master | (cd ../newrepo.git && git init . && git fast-import && git checkout)
我刚刚为我的案例更改了命令(我需要分支ip6_dev的最后65次提交):
git fast-export ip6_dev~65..ip6_dev | (cd ../puppet/ && git init . && git fast-import && git checkout)
当我运行命令时,我得到以下输出:
---------------------------------------------------------------------
Alloc'd objects: 10000
Total objects: 7985 ( 782 duplicates )
blobs : 4978 ( 0 duplicates 2304 deltas of 49
25 attempts)
trees : 2942 ( 782 duplicates 263 deltas of 29
28 attempts)
commits: 65 ( 0 duplicates 0 deltas of
0 attempts)
tags : 0 ( 0 duplicates 0 deltas of
0 attempts)
Total branches: 1 ( 1 loads )
marks: 1048576 ( 5043 unique )
atoms: 2438
Memory total: 2997 KiB
pools: 2606 KiB
objects: 390 KiB
---------------------------------------------------------------------
pack_report: getpagesize() = 65536
pack_report: core.packedGitWindowSize = 33554432
pack_report: core.packedGitLimit = 268435456
pack_report: pack_used_ctr = 358
pack_report: pack_mmap_calls = 65
pack_report: pack_open_windows = 1 / 1
pack_report: pack_mapped = 14669749 / 14669749
---------------------------------------------------------------------
fatal: You are on a branch yet to be born
我缺少什么?
答案 0 :(得分:1)
&& ...
序列的最后一步是:
git checkout
请注意缺少分支名称(或特定的提交ID或路径)。然后看看the git checkout
documentation(我承认这有点模糊):
更新工作树中的文件以匹配索引或指定树中的版本。如果没有给出路径, git checkout 也会更新
HEAD
以将指定的分支设置为当前分支。 [...]你可以省略< branch>,在这种情况下命令退化为“检查当前分支”......
因此,下一个要问的问题是:“当前分支的名称是什么?”通常可以运行git branch
来查找,但是如果我们这样做,我们可能什么都没有(你根本不会得到任何东西,但你不会得到一个分支标记也带星号;见下文):
$ mkdir example.git
$ cd example.git
$ git init
Initialized empty Git repository in ...
$ git branch
$
还有一个替代的低级git命令可以给我们正确的答案:
$ git symbolic-ref --short HEAD
master
$
(或者我们可以欺骗并查看文件.git/HEAD
)。
请注意,我此时并未实际运行git fast-import
,但如果我运行git checkout
时没有参数,我会收到同样的错误:
$ git checkout
fatal: You are on a branch yet to be born
唯一剩下的事情就是要指出git fast-import
将按照其输入的指示导入提交(和分支),该输入来自git fast-export
,您按名称指向仅从分支ip6_dev
导出某些提交。因此,我可以预测,如果你运行git branch
,你会看到:
$ git branch
ip_dev
$
这意味着您的新回购只有一个分支ip_dev
,不您所在的分支:您在master
,而不是fast-export
但是存在。如果您master
在分支master
上编辑了一些提交,git checkout
将存在,您就可以ip_dev
。< / p>
如果您想只拥有一个master
分支,只需明确检查,以便切换当前分支。你仍然没有{{1}},但现在git不会抱怨无法检查出来。