在另一个问题上使用Chris的答案,我可以将快照历史记录添加到我的git存储库中.由于其中一个文件不是我的历史记录的一部分,而只是在快照中,因此第一个原始提交现在也包含此文件的删除.我该怎么撤消?
起初我认为这与我如何从git的历史记录中删除敏感文件相反,但实际上我不想将文件插入历史记录,只是从历史记录中删除删除.
我收到了一些源代码并决定使用git,因为我的同事使用了mkdir $VERSION等方法.虽然代码的过去目前似乎并不重要,但我仍然希望将其置于git控制之下以更好地理解开发过程.所以:
将这些过去的版本放入我现有的git仓库的简便方法是什么?目前没有远程仓库,所以我不介意重写历史记录,但考虑到远程存储库的解决方案当然是首选,除非它更复杂.基于目录或基于档案文件的历史记录,不需要任何更多交互的脚本的加分点.
假设我们有以下修订图:
A-X-Z--B
\
\-C
Run Code Online (Sandbox Code Playgroud)
在B和C之前使用A.进一步假设我从上游重新绑定A,创建一个新的提交A*,然后将B和C重新绑定到A*上.生成的修订图如下:
A*-X'-Z'-B
\
\-X"-Z"-C
Run Code Online (Sandbox Code Playgroud)
请注意,不再共享共享历史记录.有没有一种简单的方法可以解决这个问题,除了说,重新定义B然后明确地将C重新定位到Z'.换句话说,是否有更好的方法可以同时自动修改多个分支以保留共享历史记录?只是人为地在分割点放置一个标记,或者手动检查图形以找出修改C以保留共享历史记录的提交的sha1似乎有点尴尬,更不用说开放可能性了错误,特别是因为我必须在每次改变时都这样做,直到我检查上游分支的变化.
我需要将我的git repo分成两部分.我使用了这里显示的步骤:Detach(move)子目录到单独的Git存储库中
我使用的命令是:
git filter-branch --subdirectory-filter ABC HEAD -- --all
Run Code Online (Sandbox Code Playgroud)
这似乎很好,并留下了ABC作为根.
但是现在,如果我尝试检查在拆分回购之前存在的标记:
git checkout an-old-tagname
Run Code Online (Sandbox Code Playgroud)
它正在重新创建旧的目录结构 - 所以重新创建ABC作为子目录,以及XYZ1和XYZ2.
我知道回购真正看到了那个时间点 - 但我希望标签只引用ABC位,好像它们当时已经在根部.我认为这是filter-branch在重写历史时所做的事情,但显然我并没有正确地理解它.
如何重新编写标签,以便我可以回到过去,同时仍然将ABC作为回购的根源?