前言
最近在实习感受到公司多人团队协作中对于规范的要求非常高,只有大家都遵守统一的规范才会使得大家像是一个整体在工作,在代码可读性上也有所提高,一定程度上也提高了团队效率,在这个团队协作的过程中git可以说是非常的重要,我之前个人或者少数几个人的开发的时候对于git的使用就停留在clone,push,pull几个命令的程度,现在感觉远远不够,特此专门再来仔细学习学习
git
推荐一个学习git的平台,我也是刚发现的,通过图解的方式展示每个操作之后的状态,帮助理解git命令
推送和拉取
git的五个区

常用命令
- 初始化仓库
git init
- 克隆代码
git clone [地址]
- 添加文件到暂存区
git add <filename>
git add * // 添加所有文件,不包括文件名以 . 符号开头的文件
git add . // 添加所有文件,包括文件名以 . 符号开头的文件
- 将暂存区的文件提交的本地仓库
git commit -m "代码提交信息"
- 将本地的变动代码推送到远端仓库
git push origin master
origin // 是配置的远程仓库,如何配置请看6
master // 主分支,请看分支管理部分
//简写,在只配置了一个远程仓库且远程仓库只有一个master分支时才可以
git push
- 配置远程仓库
// 添加一个远程仓库origin
git remote add origin git@github.com:ChinglinTHU/git-test-a.git
// 查看配置的远程仓库
git remote -v
// 修改远程仓库
git remote rename origin test
// 删除远程仓库
git remote remove test
- 从远程仓库拉取代码到本地
git pull <远程主机名> <远程分支名>:<本地分支名>
// 将远程的 next分支拉取到本地和master分支合并
git pull origin next:master
// 远程分支和当前分支合并时可以省略第二个分支名
git pull origin next
// 省略写法 把origin的当前分支合并到本地
git pull
git pull过后本地分支如下:
- 另一种拉取代码的方式
// 将远程的代码同步到本地,但是不会自动合并 git push等于git fetch + merge
git fetch origin
- 撤回本地仓库的某文件
// 撤销 file-name 的commit
git reset <file-name>
- 撤回暂存区的文件到工作区
// 从暂存区撤回 file-name
git checkout <file-name>
// 撤回暂存区的所有文件
git checkout .
分支管理
- 新建分支
// 新建分支并切换
$ git checkout -b <new-branch-name>
# 如果仅新建,不切换,则去掉参数 -b
- 查看当前有哪些分支
git branch
# * dev
# master # 标*号的代表当前所在的分支
// 查看本地和远程有哪些分支
git branch -a
# * dev
# master
# remotes/origin/master
- 切换分支
// 切换到master分支
git checkout master
// 也可以使用版本号
git checkout a5d88ea
- 合并分支
// 将分支合并到master
git merge <branch-name>
其他
-
查看git状态,列出当前到暂存区和本地仓库还未提交文件
gitTest% git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: .aaa new file: aaa new file: bbb new file: ccc
2. git中使用https协议和ssh协议的区别
ssh:
- 一般使用22端口
- 需要先在本地生成SSH密钥对再把公钥上传到服务器,以后clone和push的时候就不需要提供账号密码授权了
- 速度相较慢点
Https:
- 一般使用443端口
- 需要通过用户名/密码授权
- 速度相较快点
一般防火墙会打开80和443这两个http/https协议的端口,所以https的方式更通用,对于ssh来说,企业防火墙很可能没打开22端口
总结:
HTTPS利于匿名访问,适合开源项目,可以方便被别人克隆和读取(但没有push权限);
SSH不利于匿名访问,比较适合内部项目,只要配置了SSH公钥极可自由实现clone和push操作