git使用
文章目录
1 使用前配置用户名和邮箱
# 设置用户名
git config --global user.name "gxt_kt"
# 设置邮箱
git config --global user.email "gxt_kt@163.com"
# 读取用户名
git config --global user.name
# 读取邮箱
git config --global user.email
2 管理项目
初始化:git init
会在文件夹生成 .git
文件夹
下图为git存储流程
常用命令:
git add (工作区 --> 暂存区)
git commit (暂存区 --> 本地仓库)
git status 查看修改状态
git add name 添加单个文件 一般使用 git add . 添加所有
git commit -m “注释” 提交内容到当前分支
git log [option] 查看提交记录
- –all 显示所有分支
- –pretty=oneline 将提交信息显示为一行
- –abbrev-commit 使得输出的commitId更简短
- –graph 以图的形式显示
使用:
git init
git add .
git commit -m "push"
# 查看历史版本
git log --all --pretty=oneline --abbrev-commit --graph
# 回退到某个版本
git reset commitID --hard
3 分支
常用命令:
git branch 查看分支
git branch name 创建分支
git checkout name 切换分支
git checkout name -b 分支若不存在就创建并切换
git merge name 把name合并到当前所在分支
git branch -d name 删除分支,需要做各种检查
git branch -D name 不做检查就删除分支
使用:
git branch
git branch branch_test1
git checkout branch_test1
# 对文件进行一些修改。。。。。。
git add .
git commit -m "push"
git checkout master
git merge branch_test1 #对修改合并到master
git branch -d branch_test1
4 gitee/github绑定
本地获取SSH公钥:
ssh-keygen -t rsa # 并回车确定,如果存在就覆盖
cat ~/.ssh/id_rsa.pub # 获取公钥
gitee / github 端填写相应公钥
进行测试:
ssh -T git@gitee.com # gitee
ssh -T git@github.com # github
成功:
5 远程仓库操作
首先云端有一个仓库,知道了仓库的ssh地址
关联远程仓库: git remote add <远端名称> <仓库路径>
git remote add origin git@gitee.com:gxt-kt/git_test.git
关联错了或者需要重新关联可以:git remote rm origin
查看远程仓库:git remote
推送到远程仓库: git push origin master
可以-f 表示强制覆盖
使用:
# 先创建一个远程仓库,把ssh地址记下来为xxxxxx
git remote add origin xxxxxx
git push origin ****** # 推送master/分支
6 远程仓库其它常用命令
- git clone <仓库路径> [本地目录] 本地目录可以直接省略
默认下载git的默认分支,如果需要下载指定分支,需要
git clone -b branchname https://github.com/xxx/xxx.git
- git pull 将远程仓库修改再拉取到本地(更新)
有时会失效,是因为没有建立和远程仓库的联系,可以直接 git pull origin master
7 .gitignore 使用
vim .gitignore
可以在文件里写不需要提交的内容
例如:
/build/*
build/
*.txt
/src/test.cpp
实测写成./build/*
会不起作用
8 删除仓库中大文件(踩坑)
最开始如果在.gitignore中没有写好一些大文件就提交,会有大文件存在git中,后面会很难删除,github大于100M也不允许上传
解决方法参考:https://www.jianshu.com/p/fe3023bdc825
- 查看文件大小 ``du -ah .git/objects`
- 占用空间最多的五个文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
从 git 历史中移除
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch 想要删除大文件名' --prune-empty --tag-name-filter cat -- --all
注意这里想要删除大文件名需要写成相对路径,不能只写文件名(maybe)
另外好像是包含这个文件的分支都要进去删掉(maybe)
清除后刷下git
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
git push origin master --force #强制推送,慎用
9 删除缓存(以前提交的一些内容还在比如build文件夹)(踩坑)
在gitignore中添加build/并不会让build文件夹直接消失,原因是git已经tracking了某些想忽略的文件,需要我们自己手动删除已经tracking的文件
git rm -r --cached ignoreFile
// 例如 git rm -r --cached build/
需要指出,这个指令只会删除当前分支下的缓存文件
10. push时总是要提交密码,对了也会缺少权限
主要是使用了http进行连接,改用git就没有这个问题
先断连一下:
git remote rm origin
再连接时选择git,不要选http
git remote add origin git@gitee.com:gxt-kt/******.git