阅读 151

Git 使用经验及心得

记录这个的原因,是因为最近公司的服务器上的 git 管理工具从 gitlab 迁移到了非常轻量级的 gogs 上,然后由我主导这次代码迁移,迁移仓库地址倒是很简单,就是 git 工作流发生了变化 ,写了个 wiki 给同事们参考,中途自己也学了些其他的东西,从头好好梳理一下我的 git 使用习惯,记录一下

基本使用

1. 保存密码

最开始工作的时候并不是mac 电脑,看同事们的 mac 钥匙串能够自动保存git认证信息,每次不需要手动输入很羡慕,后面经过自己研究,发现windows下也能够实现保存认证信息就是用如下命令

git config --global credential.helper store
复制代码

这样在你输入一次账号密码后.你这个仓库的账号密码git都会帮你存在本地,下次提交就不需要再次输入密码了.还是节省了很多时间

2. 设置代理

有时候想在 github 找一些开源项目clone 下来学习一下.但是在天朝有时候 访问github的时候很慢,git clone 的时候实在太慢了,所以想着能不能通过代理来访问.查看文档,发现果然有,通过如下方式

git config --global http.proxy socks5://127.0.0.1:1080 
git config --global https.proxy socks5://127.0.0.1:1080 
git config --global --unset http.proxy 
git config --global --unset https.proxy 
复制代码

socks5协议都懂的就不多说咯,这样就是把http和https协议的数据都设置只走代理.github下载嗖嗖的快...后面两个命令是取消掉代理,偶尔碰到访问不了github的时候就可以用到这个啦

3.删除特定提交

这种情况需要先用git log命令在历史记录中查找到想要删除的某次提交的commit id,比如下图中圈出来的commit id 我是通过提交信息的,所以一定要写好提交注释.方便后面有可能需要的查询

然后执行以下命令(”commit id”替换为想要删除的提交的”commit id”

git rebase -i "commit id" 执行该条命令之后会打开一个编辑框,内容如下,列出了包含该次提交在内之后的所有提交。

然后在编辑框中删除你想要删除的提交所在行,然后保存退出就好啦,哦,进入的是vim的编辑器.输入当前行用dd 就可以了.保存后,如果有冲突的需要解决冲突。接下来,执行以下命令,将本地仓库提交到远程库就完成了:

git push origin master -f

4.恢复误操作删除的分支

前面说的是怎么删除,这次我们来说说怎么恢复,当然恢复的前提是你这个分支的更改有提交信息,提交到本地仓库,如果你的改动没有提交到本地仓库,那就找不回来了 首先我们先新建一个分支,随便修改一些,然后提交了删除这个分支

接下来我们通过 git log -g 来找到这次提交
可以发现我们这次提交还是通过git log 查询到 当然 如果你的提交历史很靠前用 git log 可能需要翻很久历史才能找到 提交信息,我们可以通过 git reflog来定位你的提交信息

git reflog  show | grep  branchName
git reflog  show | grep  commit message
复制代码

reflog是git提供的一个内部工具,用于记录对git仓库进行的各种操作 可以使用git reflog show或git log -g命令来看到所有的操作日志 找到你最后一次提交的commit_id git branch branchName commit_id就可以恢复这个分支了

5. 批量删除远程分支

哈哈,还是回到删除吧.我们公司之前的git flow 是 develop/release/feature/bugfix/ 四个分类并行,通过gitlab的merge request 来管理. 所以远程仓库充斥着一堆 bugfix feature 分支.去年一年产生了近两百个分支.提merge request的时候 搜索起来都麻烦的要死. 趁着这次迁移代码到 gogs 上去,刚好git flow也要切换到 github flow 以后主仓库只留 develop release 两个种类的分支.bugfix,feature 都建在自己的仓库里,然后提pull request 到主仓库.所以主仓库没必要留那么多分支了. 但是迁移的时候已经运维把整个数据库里的仓库信息已经导入 到gogs 上.所以那么多垃圾分支也跟着一起过来了.没办法,只能手动删除了.又不想一个个的删除. 就找到了个批量删除分支的方法

git branch -r| awk -F '[/]' '/bugfix\17/ {printf "%s/%s\n",$2,$3}' |xargs -i{} git push origin :{}
复制代码

这个命令就是把远程的所有包含 bugfix/17 的分支全删了,也就是我们去年所有的bugfix 分支全部删除,这个命令支持正则,可以自定义规则删除分支

其他一些简单的添加更改远程仓库就不一一写出来了.都是一些简单的东西,如果你对上面这些命令有疑问,或者你有更好的方法来实现这些,希望你能留言与我一起分享探讨

关注下面的标签,发现更多相似文章
评论