GIT 无法强制提交

GIT进行强制推送一些冲突的时候发生了这样的错误

zhouitpro@localhost ~/www/project $ git push dev2 master -f
michael@192.168.0.109's password: 
Total 0 (delta 0), reused 0 (delta 0)
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
To root@192.168.0.109:/home/root/repos/demo.git
 ! [remote rejected] master -> master (non-fast-forward)
error: 无法推送一些引用到 'root@192.168.0.109:/home/root/repos/demo.git'

进入到服务器的仓库目录, cat config文件显示

[receive]
	denyNonFastforwards = false 

denyNonFastforwards 这个选项大概的意思就是你推送一个冲突的版本时会拒绝
替换成. 不过这样也有一定的危险度

[receive]
	denyNonFastforwards = false 

GIT 仓库出错

我将代码提交到我的git仓库时,代码无法更新到指定目录。
我使用

git log -3

竟然出现以下错误

fatal: bad default revision 'HEAD'

如果使用

git log --all 可以正常显示

最后解决错误的方法

git symbolic-ref HEAD refs/heads/master  #最后的master是我的分支名.

GIT 优化

打包

git pack-refs --all

git prune

他可以删除你git库中那些没有关联的文件,比如你一个很大的文件不小心添加到git版本库中。然后你又不想要这个文件。你删除了。但是你版本中还是存在的你就可以使用这个命令将这些松散的文件删除, 删除临时文件

git fsck

git fsck 来查看,松散文件的关联

删除reflog

如果你有一个临时文件已经提交, git prune是检测不到的, 这时就可以清除reflog.这个可就危险了,因为reflog是你的后悔药。你删除以后你想要恢复东西可就不容易了. 但是如果你确认你的东西是没有用的。那么可以通过删除reflog(让reflog过期)然后再再使用git prune来清理.

$git reflog expire --expire=now --all  #这是清除所有
$git reflog expire --all  #这是清除90天前的记录
$git prune 
$git rerere gc  #对合并冲突的历史记录进行过期操作

git gc – GIT 管家

$git gc              #命令会自动清理 reflog90天前记录,还能运行很多自动清理的过程
$git gc --prune=now   #清空所有reflog记录

git fsck //运行一些仓库的一致性检查, 如果有任何问题就会报告. 这项操作也有点耗时, 通常报的警告就是“悬空对象"(dangling objects).