我的本地仓库包含以下提交:
A ---- B ---- C ---- D ---- E
\
1 ---- 2
\ /
1.1
字母更改位于远程仓库上。更改1,1.1和2是我不再需要的本地仓库中的临时更改。当我在B上创建一个未提交更改的存储时,这些可能是自动创建的;存储已被删除。我想让历史不那么复杂,这就是为什么我要摆脱这些。
我可以通过吹走我的本地仓库并再次克隆远程仓库来清除这些,但这似乎很重要。还有一个不在远程仓库中的本地分支我想保留。
从我到目前为止所阅读的内容来看,讨论的内容是如何将多个提交压缩为一个。删除提交对象时我找不到任何内容。我也试过" git prune<提交2的哈希>"它没有做任何事情。
如何摆脱提交对象1,1.1和2?
提前致谢。
答案 0 :(得分:3)
只需转到您关心的提交并将其设置为HEAD即可。 git垃圾会在稍后的某个时间收集1.1和2。
git checkout sha-of-1
git reset --hard HEAD
另一种做同样事情的方法是:
删除所有其他分支。
git checkout sha-of-1
git checkout -b new-branch
git branch -D 'the branches that have 1.1 and 2'
答案 1 :(得分:2)
假设您正在使用主分支,只需将其重置为origin / master(E):
git checkout master
git reset --hard origin/master
这将使您的提交对象松散,并在下次执行git gc
时进行清理答案 2 :(得分:1)
您所描述的情况是gitk
中显示的情况吗?完全刷新(Ctrl-F5)后它是否仍然相同?如果它保持不变,你仍然有一些引用指向提交“2.”删除该引用(很可能是一个分支),整个分支将消失。稍后,垃圾收集将删除提交对象。
答案 3 :(得分:0)
@Bombe和@Magnus Skog是对的(Lakshman Prasad很接近,但你说你想要摆脱1
)。但也许你的意思是:“我把所有可见的引用(即分支和标记名称)抛到1,1.1和2,甚至做了git gc
,我仍然在那里提交因为我可以通过SHA看到它们,并且它们占用了太多的磁盘空间“。
如果是这种情况,最简单的事情就是等待:你看不到的那些阻止空间被gc化的引用可能在reflog(.git/logs/
)中。它们会在一段时间后过期,然后那些提交可以 gc'ed。或者,您可以使用git reflog --expire-unreachable
强制它们更快地过期。另请参阅git reflog expire and git fsck --unreachable。