gpt4 book ai didi

混帐 rebase 。我如何使用它来折叠大量的古代提交

转载 作者:太空狗 更新时间:2023-10-29 13:18:23 26 4
gpt4 key购买 nike

我现在有一个巨大的、臃肿的 Git 存储库,它占用了 GitHub 上的大量磁盘空间,我想节食。我需要丢弃在项目历史早期做出的古老提交,这些提交基本上与项目当前的发展方向无关。

我是 - 并且永远是 - 这个私有(private)仓库的唯一用户。

理想情况下我可以这样做:

git rebase from-birth-of-repo-until-one-month-ago

谢谢,
道格

最佳答案

git merge--squash 选项可能有用,并且在 git 1.4.1 及更高版本中可用。这会暂存 merge 的效果,但不会创建提交。因此,如果 143eff 是您想要包含在压缩提交中的最旧提交,则您当前的分支是 master 而“一个月前”提交是 dcb7e5,你可以这样做:

# Save the old position of "master" by creating a branch old-master:
$ git checkout master
$ git branch old-master

# Create and checkout a branch called "new-master" that's at the old commit:
$ git checkout -b new-master 143eff

# Stage the effects of merging the "one month ago" commit:
$ git merge --squash dcb7e5
Updating 143eff3..dcb7e5b
Fast-forward
Squash commit -- not updating HEAD
[... status output showing the staged changes ..]

# Create the squashed commit:
$ git commit -m "A commit squashing history up to a month ago"
# (You could use --amend if you want them to be squashed into 143eff
# instead of being a commit after that.)

现在您可以使用 git diff dcb7e5 new-master 检查它们是否确实相同。

接下来,您想将其余工作 rebase 到 new-master 上:

$ git rebase --onto new-master dcb7e5 master

这将使您位于一个重新设置基础的 master 上,它应该具有您想要的历史记录。 (同样,您可以使用 git diff old-master mastergit log 检查这一点。将 master 推送到 github 时,您需要添加 --force 因为你重写了历史:

# Push master to github, with "--force", since you've rewritten history:
$ git push --force origin master

您现在可以删除压缩提交中的 new-master,方法是:

git branch -d new-master

显然 github 在推送时运行 git gc --auto,所以您应该很快就会看到 一些 空间节省...

关于混帐 rebase 。我如何使用它来折叠大量的古代提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3329028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com