如何清理我的git存储库

时间:2013-06-27 07:55:28

标签: git branch

我一直很懒,把所有的提交都放到了主分支中。我现在要做的是构建我的git存储库,就像本指南所说:http://nvie.com/posts/a-successful-git-branching-model/

我现在要做的是将我在master中的所有提交移动到一个名为master-cleanup的新分支。然后我想要将master-cleanup与master合并,这样我在master中只有一个提交。我想要这样做的原因是master中的所有提交占用了大量空间,如果我将所有提交移动到清理分支,我想我可以在我的本地机器上删除该分支并且只将它放在服务器。这样当我签出我的主分支时,我只会下载最新的提交而不是所有的历史记录吗?

我尝试首先创建新分支然后将主服务器重置为第一个提交。之后,我将与master-cleanup合并为no-ff:

git branch master-cleanup
git reset --hard 4f8d90cc225288bf889090f80103cfa0887a4742
git merge --no-ff master-cleanup

我认为这会将我的所有提交移动到新的master-cleanup分支,但是当我执行合并时,我也会导入所有提交。我认为--no-ff会阻止这种情况并强制合并成为对主人的新单一提交?现在我git整个提交日志加上新的合并提交......

关于如何解决我想做的事情的任何想法?

3 个答案:

答案 0 :(得分:1)

--no-ff表示没有快进。即使合并的分支直接跟随您的顶部,它也可确保您获得双父合并提交。没有你只是得到一个线性历史而没有暗示合并的一组提交属于一起。

要将提交合并为使用merge -- squash的提交,或者如果已经存在,则可以使用rebase -i并提出壁球。或reset --soft低点,并提交索引。


至于问题的其他部分,历史确实占用了一些空间,但很少值得一提的是来源。如果你只是对过去不感兴趣,那就把它自己留下吧。只需对其进行浅层克隆即可。阅读git clone --depth 1。即使您不将它用于练习,您也可以制作这样的克隆来查看尺寸差异并确定它不值得摆弄。

答案 1 :(得分:0)

您需要为--squash指定git merge。有关详细信息,请参阅thisthis答案。

答案 2 :(得分:0)

无需创建新分支。有很多方法可以做到这一点。让我先说清楚。您希望将所有提交合并到一个提交中。这是你的问题。

尝试这些命令

git log --oneline //Show all your commits. (Note down the SHA of your first commit)
git rebase --interactive 22dacee where 22dacee is the SHA you noted in above step.

现在,一个编辑器会弹出,并会显示这样的内容

pick aasad23 X
pick a434fsa Y
... a long list follows.

# Rebase adrtec..ds3452 onto adrtec
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.

现在,只需将pick个字替换为s,但第一个除外。并保存文件。新的编辑器将再次弹出,并将显示哪些提交将被合并。只需重新检查一次并再次保存。你会看到现在只有一个提交。

相关问题