我有一个Git存储库,其中包含许多子目录.现在我发现其中一个子目录与另一个子目录无关,应该分离到一个单独的存储库.
如何在将文件的历史记录保存在子目录中的同时执行此操作?
我想我可以制作一个克隆并删除每个克隆的不需要的部分,但我想这会给我一个完整的树,当检查旧版本等.这可能是可以接受的,但我宁愿能够假装两个存储库没有共享历史记录.
为了说清楚,我有以下结构:
XYZ/
.git/
XY1/
ABC/
XY2/
Run Code Online (Sandbox Code Playgroud)
但我想这样做:
XYZ/
.git/
XY1/
XY2/
ABC/
.git/
ABC/
Run Code Online (Sandbox Code Playgroud) 我希望在我的项目的第一次提交中更改某些内容而不会丢失所有后续提交.有没有办法做到这一点?
我不小心在源代码中的评论中列出了我的原始电子邮件,我想改变它,因为我从机器人索引GitHub收到垃圾邮件.
有办法从以后的提交中更改消息:
git commit --amend # for the most recent commit
git rebase --interactive master~2 # but requires *parent*
Run Code Online (Sandbox Code Playgroud)
如何更改第一次提交(没有父级)的提交消息?
我目前包含顶级子文件夹,比如多个项目一个很大的仓库/a,/b,/c,和/d.
现在我想将该存储库拆分为两个不同的存储库:一个包含/a和/b另一个包含/c和/d.
我知道git filter-branch --subdirectory-filter,这对于提取单个目录是完美的,但它似乎无法一次提取多个目录.
我也知道git filter-branch --prune-empty --tree-filter,这将允许我删除所有内容,但两个想要的目录.这感觉不完全正确,因为我必须手动指定可能存在的所有顶级目录.
有没有更好的方法从大型存储库中提取两个目录?
PS:当然,使用其他东西的任何好的解决方案git filter-branch都很好.;)
我有一个带有几个目录的git仓库和一个文件MyFile.ext.
/
LargeDir1/
LargeDir2/
LargeDir3/
.
.
.
MyFile.ext
Run Code Online (Sandbox Code Playgroud)
我想在其中开始一个新的回购MyFile.ext,并保留所有与之相关的历史,但忽略其他一切(所有的LargeDirs).我怎样才能做到这一点?
对于目录,我已成功使用此答案,但我在单个文件上尝试过,但它不起作用.
我也尝试过这个答案,除了我的文件外,它确实删除了所有内容,但它似乎也留下了所有的历史.
我有一个git存储库,它有几个提交到不同的子目录,我想以下面的方式将存储库切成两个:
/
sub1/
sub2/
sub3/
Run Code Online (Sandbox Code Playgroud)
->
/
sub1/
Run Code Online (Sandbox Code Playgroud)
个别潜艇已发展到sub1应该是独立存储库的地步.此外,没有一个提交触及多个子.
因此,我想以某种方式提取一个新的存储库,该存储库只接受提交,sub1同时保留所有其他内容.但我想保留历史记录(但没有相关的提交sub2也没有sub3).
注意:我依稀记得有一些命令可以做到这一点,但我自己从未使用它,也不记得它被称为什么,所以我无法搜索它.