如何在git repo中插入重新发现的备份文件



我的问题是,我有一组相当大的"暴力版本"文件,即与日期指示器一起存储,这些文件也分布在各种数据载体上。

在克服了我对版本控制的厌恶之后,我想把所有这些文件放在一个git repo中,以便按时间顺序重建快照。

问题:

  • 假设我有一个git repo,它包含与日期对应的快照a<-B<-E<-F按时间顺序排列,我在尘封的数据载体上发现了快照C;如何添加spapshotC以类似git repo containA<-B<-C<-E<-F

  • 如何将文件f添加到其他提交的快照中已经存在的快照B

理想情况下,生成的git repo应该给人一种印象,即所有提交都是按时间顺序发生的,即在某个时候,当我确信所有内容都在repo中时,我想删除有关快照/文件添加到git repo的顺序的所有信息;还有解决方案吗?

由于我不是一个巫师,我很感激能提供解决方案。

所以您想在B:之后将提交的C拼接到历史的中间

  1. 创建一个分支名称来保留您的位置,并查看它。

  2. 重置为B.

  3. 添加新发现的文件并将其提交为C.

  4. 在新分支的顶部重新调整旧分支。


这里有一个例子。我准备了一份回购样本;这是日志:

commit 740dc8c1dd312d93c63f8edd4dfb91503f7f66df (HEAD -> master)
F
F (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit d0b2924ad33e4d7f2898eb8707bbdf016f7adf8a
E
E (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit a932a794ceb6df01483490410d7a3e538f556876
B
B (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit 85d3a01ee94427729b745078c8c06d8b89a6af52
A
A (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)

因此,从下往上阅读,我添加了文件A并调用了提交A,添加了文件B并调用了该提交B,然后对E和F也是如此。

现在假设我们发现了文件C的存在。我将把一个添加C:的提交拼接到历史链中

git branch holdMyPlace
git checkout holdMyPlace
git reset --hard a932a794 # go back to B
touch C
git add .
git commit -m"C"
git rebase holdMyPlace master

现在是日志:

commit 882d6e170101a1a9cb0462c5eb1b6103470ab07c (HEAD -> master)
F
F (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit 57e9a01b94f48741b70ecfea32492659cef4aeb3
E
E (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit c5b41b74b2dc0a36bef17c01ed581eda585ce103 (holdMyPlace)
C
C (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit a932a794ceb6df01483490410d7a3e538f556876
B
B (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit 85d3a01ee94427729b745078c8c06d8b89a6af52
A
A (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)

这正是你想要的历史:看起来C是在B之后添加的,E和F是在C之后添加的。

最新更新