如何清理我的git存储库
我一直懒惰,把我所有的提交到主分支。 我现在想要做的就是像本指南所说的那样构建我的git存储库:http://nvie.com/posts/a-successful-git-branching-model/
我现在想要做的就是将我在master中的所有提交移动到一个名为master-cleanup的新分支。 然后,我想将master-cleanup和master合并,这样我只在master中有一个提交。 为什么我想这样做的原因是,所有在主提交需要大量的空间,如果我将所有提交移动到清理分支我想我可以在我的本地机器上删除该分支,只有它位于服务器。 这样,当我结帐我的主分支时,我只会下载最新的提交,而不是所有的历史记录吗?
我试图通过首先创建新分支来完成此操作,然后将主设备重置为第一次提交。 之后,我将其与no-ff的master-cleanup合并:
git branch master-cleanup
git reset --hard 4f8d90cc225288bf889090f80103cfa0887a4742
git merge --no-ff master-cleanup
我认为这将把我所有的提交移动到新的主清理分支,但是当我执行合并时,我还导入了所有提交。 我以为--no-ff会阻止这种情况发生,并强制合并成为一个新的单一的提交给主人? 现在我git整个提交日志加上新的合并提交...
关于如何解决我想要做的任何想法?
--no-ff
表示没有快进。 它确保即使合并的分支直接位于顶层之后,您也会得到双亲合并提交。 如果没有,你会得到一个线性历史记录,而没有提示合并的一组提交属于一起。
要融入一个你使用merge -- squash
或者如果已经在那里,你可以使用rebase -i
和问壁球。 或reset --soft
一个较低点,并提交索引。
至于问题的另一部分,历史确实占据了一定的空间,但其来源很少值得一提。 如果你对过去的工作不感兴趣,那么就单独回购。 只是做一个浅层克隆。 阅读git clone --depth 1
。 即使你不使用它来练习,你也可以做出这样的克隆来看看尺寸的差异,并决定不值得一提。
你需要为git merge
指定--squash
。 看到这个和这个答案的更多信息。
没有必要创建一个新的分支。 有很多方法可以做到这一点。 让我先弄清楚这件事。 你想合并你所有的提交到一个提交。 这是你的问题。
试试这些命令
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.
现在,只需用s
替换除第一个以外的所有pick
词。 并保存该文件。 新的编辑器将再次弹出,并会告诉你哪些提交将被合并。 只需重新检查一次并再次保存。 你会看到现在只会有一个提交。