我想从一个存储库中删除一定范围的提交并将它们放入一个新的存储库中。 例如,我有回购“oldRepo”:
A-B-C-D-E-F-G-H-I
->“newRepo”B-C-D-E-F
我有一个 rebase 来解决它的想法,但我陷入了一个错误(这是关于它的问题:Stackoverflow-question) 我真的找不到任何有用的东西,任何人都可以用这个特定的命令或程序帮助我吗?
git cherry-pick
,因为您可以cherry-pick一系列提交(git cherry-pick FIRST^..LAST
)。
转到您的新存储库本地克隆(在其主分支中至少有一个提交)并执行:
cd /path/to/new/repository
git remote add old /path/to/old/repository
git fetch old
git switch main
git cherry-pick B^..F
如果需要,您可以添加合并策略选项(例如
-Xtheirs
)。
git replace
:
git init new-repo
cd new-repo
git fetch /path/to/old/repo hash-f:branchname
git replace --graft hash-b
git filter-branch -- --all
rm -rf .git/refs/original/
git gc
这会拉取历史记录以从您的旧回购中提交 F,然后删除提交 B 之前的所有内容。
请注意,这必须为您的所有提交分配新的提交 ID(就像使用
rebase
或 cherry-pick
)
我找到了另一个解决方案,我使用 git fast-export COMMIT_ID..BRANCH 并在之后再次导入它,效果很好。
git fast-export commit_ID..BRANCH > export.txt
//switch in new Repo
git fast-import < export.txt
这是一种方法:
git switch -c beautiful_history_1
git rebase --interactive
克隆标志(来自 git-clone):
--无标签
不要克隆任何标签,并在配置中设置 remote..tagOpt=--no-tags ,确保以后的 git pull 和 git fetch 操作不会跟随任何标签。随后的显式标签提取仍然有效,(参见 git-fetch [1])。
可以与 --single-branch 结合使用来克隆和维护一个除了单个克隆分支之外没有引用的分支。这很有用,例如维护一些存储库的默认分支的最小克隆以进行搜索索引。
--[无-]单分支
仅克隆导致单个分支尖端的历史记录,由 --branch 选项指定或主分支远程的 HEAD 指向。进一步提取到生成的存储库中只会更新该选项用于初始克隆的分支的远程跟踪分支。如果在创建 --single-branch 克隆时远程的 HEAD 没有指向任何分支,则不会创建远程跟踪分支。