我恐怕找不到任何类似这种特殊场景的东西.
我有一个有很多历史的git存储库:500多个分支,500多个标签,可以追溯到2007年中期.它包含~19,500次提交.我们想在2010年1月1日之前删除所有历史记录,以使其更小更容易处理(我们将在存档库中保留历史记录的完整副本).
我知道我想要成为新存储库的根目录的提交.但是,我不能找出正确的git mojo来截断repo以从那个提交开始.我猜的是一些变种
git filter-branch
Run Code Online (Sandbox Code Playgroud)
涉及移植是必要的; 它也可能是必要的对待每一个我们要分别保持在200多个分支机构,然后修补回购重新走到一起(这是我不知道该怎么做).
有没有人做过这样的事情?如果重要的话,我有git 1.7.2.3.
我已经为Github上的一个项目提交了一堆提交,但是我意识到我没有在我正在使用的计算机上设置正确的电子邮件和提交者全名,因此用户的头像和电子邮件地址不在那里.
如何重写所有过去的提交电子邮件和用户名?
我提交了id 56f06019(例如).在那个提交中,我不小心提交了大文件(50Mb).在另一个提交中,我添加相同的文件,但大小合适(小).现在我克隆的回购太重了:(如何从回购历史中删除那个大文件以减少我的回购的大小?
假设我有这样的树:
... -- a -- b -- c -- d -- ...
\
e -- a -- k
Run Code Online (Sandbox Code Playgroud)
我希望它变得公正
... -- a -- b -- c -- d -- ...
Run Code Online (Sandbox Code Playgroud)
我知道如何将分支名称附加到"e".我知道我要做的事情会改变历史,这很糟糕.另外我想我需要使用像rebase或filter-branch这样的东西.但究竟是什么 - 我迷路了.
好.情况如下:我现在有一棵相当大的树(像这样)
s -- p -- r
/
a -- b -- c -- d -- e --- g -- w
\ \
t -- p -- l y -- k
Run Code Online (Sandbox Code Playgroud)
但是在我的第一次提交中(比如前面的"b"),我添加了二进制文件,这使整个回购非常繁重.所以我决定把它们带走.我用filter-branch做了.现在,从第二次提交开始,我有两个长的提交分支.
s -- p -- r
/
a -- b -- c -- d -- e --- …Run Code Online (Sandbox Code Playgroud) 我想从我的回购中删除一个巨大的二进制提交.
> git log --all -- '*.tiff'
commit 05f03aba18164c736182e612181f99ce04e38845
...
Run Code Online (Sandbox Code Playgroud)
它不是分支机构的一部分......
> git branch --all --contains 05f03aba
> (nothing)
Run Code Online (Sandbox Code Playgroud)
...,它没有被标记指向,并且它不能被reflog引用.(我已经清除了git reflog expire --expire=now --all)
然而,提交以某种方式被引用,因此没有被修剪:
> git fsck --unreachable
> (nothing)
Run Code Online (Sandbox Code Playgroud)
如何找出导致提交的原因?