git原理简图:
ssh设置
- 配置用户名
git config --global user.name "sxiong"
- 配置邮箱
git config --global user.email "sxiong@hust.edu.cn"
- 生成秘钥
ssh-keygen -t rsa -C "sxiong@hust.edu.cn"
- 按三个回车,密码为空(不需要输入密码,你要输入也不强求)
- 然后把生成的id_rsa.pub内容粘贴到github个人中心的账户设置的ssh key里面
git使用
- 在github/gitlab上新建一个reposrity
- 从远程仓库git@github.com:sixiong/sixiong.github.io.git克隆一份到本地Blogs,这里边第一个sixiong是我的用户名
git clone git@github.com:sixiong/sixiong.github.io.git Blogs
(可以添加 -o 参数,来代替长长的仓库地址,默认是origin)
cd Blogs
- 新建一个分支
git branch prd_1
- 切换到自己的分支
git checkout prd_1
- 将自己本地的分支prd_1 push到远程服务器origin上
git push origin prd_1
(origin是默认,在克隆时候-o参数可以任意制定) - 添加文件到本地仓库
git add filename
(文件名,如果带的是参数 * 表明这个文件夹下的全部add) - 提交到本地仓库
git commit -m "标签说明"
(如果没有添加文件,可以这里的add 和commit合并了,在commit时增加 -a 参数) - 推送到远程服务器
git push
(默认推送到与当前分支相关联的远程分支上) - 远程分支覆盖本地分支
git fetch --all
git reset --hard origin/master
- 切换https到ssh
git remote set-url origin xxxx
冲突处理
先说产生冲突的场景:
场景举例:
项目组A负责功能模块A
项目组A从主分支上拉一个分支prd_A,
项目组A有两个dev,dev1和dev2。
他俩各自从prd_A分支上clone一份代码到本地仓库,然后dev1在文件1中添加了自己负责模块的配置项,并把它推送到远端服务器。
dev2也在文件1中相同位置添加了自己负责模块的配置项,然后他push到远端服务器时就是出现冲突。
解决冲突:
更新远程服务器分支内容到本地分支
git fetch
合并远程服务器分支与本地分支
git merge origin/prd_A
(这两部相当于git pull
)
根据冲突修改代码
git commit -a -m "标签说明"
push到远程服务器
git push
学会查看版本树 gitk
真的是个好东西!
冲突可以来自本地两个不同的分支,可能来自本地的分支与远程对应的分支,可能来自本地的分支与远程非对应的分支(待验证),或者远程不同的两分支(待验证)