git引发的事故

上周服务器的一位同事一个不小心用了git push -f,抹掉了我们一上午的工作内容,还好抹掉的记录不是太多大概八九条.
各自花了大概半小时恢复了数据

恢复过程

#查看所有的本地操作数据
git reflog
#或者查看所有数据,找到被抹掉的commit
git log -g
#复制一个提交节点并在当前分支做一次完全一样的新提交。
git cherry-pick commit_id

可以看出强制提交这个命令的危险性,如何来禁止强制呢?

禁止强制推送

本地禁止强制推送

git config --global receive.denyNonFastForwards true
git config --global receive.denyDeletes true

hook方式

https://gist.github.com/stefansundin/d465f1e331fc5c632088

gitbucket 远程仓库禁止强制推送

gitbucket提供了分支权限配置: 参考

Rewriting history 就是防止强制推送

github配置

https://help.github.com/articles/configuring-protected-branches/

gitlab配置

https://about.gitlab.com/2014/11/26/keeping-your-code-protected/

强制删除rm -rf

mac下可以用zsh这样的终端rm -rf /会有二次确认

trash-cli

#https://github.com/andreafrancia/trash-cli
easy_install trash-cli

rmtrash

brew install rmtrash
#配置
alias rm="rmtrash"
alias rmdir="rmdirtrash"

mv替代rm

mkdir -p ~/.trash
alias rm=trash
alias r=trash
alias rl="ls ~/.trash"
alias ur=undelfile
undelfile()
{
mv -i ~/.trash/$@ ./
}
trash()
{
mv $@ ~/.trash/
}