目录
git用来干什么?
不知道你学习的时候有没有遇到这样的情况:
比如说,我们要做某一个程序,你手中有一份办成品,但现在需要在上面进行修改。
1、你怕修改之后万一出现什么错误,把原来的文件也弄坏了;
2、每当我们完成一个新的需求点之后,又来了对这个需求更好的实现方式。为了能够有及时发布我们不得不对原来的代码进行保存
于是你不得不复制出一个又一个副本,随着需求点越来对多,于是每次都是复制粘贴副本,产出的文件就越来越多,文件多不是问题,问题是:随着版本数量的增多,你还记得这些版本各自都是修改了什么吗?
为了能够更方便我们管理这些不同版本的文件,于是有了版本控制器。
安装
官网下载地址/ 群里安装包
安装步骤
图形化安装
配置全局用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
配置SSH
# 生成sshkey ssh-keygen -t rsa
#执行完毕上面命令之后,按几次回车
#查看公钥的内容,复制到git的sshkey位置
cat ~/.ssh/id_rsa.pub
创建git仓库
git init
状态模型
- 工作区(workplace)
- 暂存区(index)
- 本地仓库(local repository)
- 远程仓库(remote repository)
仓库管理
工作区(workpace->暂存区(index)
git add . #当前文件夹以及子文件夹
git add fileName #某个文件
暂存区(index)->本地仓库(local repository)
git commit -m '备注提交内容'
新建远程仓库
以码云为列进行安装-----需要配置公钥
克隆远程仓库
git clone xxxx地址 (不加分支默认master)
#默认拉取master分支代码
git clone “git地址”
克隆远程仓库其他分支(了解内容)
git clone -b xxxxx分支 xxxx地址 (不加分支默认master)
#拉取dev分支代码
git clone -b dev “git地址”
工作常用步骤
git status #查看当前仓库状态
git add . #添加到暂存区
git commit -m 'xxxx' #添加到本地仓库
git pull # 同步远程仓库到本地,检查远程仓库是否比本地版本更高一些
git push #推送到远程仓库
日志查看
提交日志
git log #日志
git log --pretty=oneline #美化输出,行格式显示
git log --pretty=oneline --abbrev-commit #简化版本号 行格式显示
历史命令日志
#版本相关,如果再版本回滚时误操作了,可以通过这
#个地方来找历史的版本号和命令进行恢复
git reflog
撤销和回退
撤销修改
git checkout xxx #撤销某个文件修改,这里的数据还没有提交到暂存区
git checkout . #撤销当前文件夹内所有修改
git reset --hard HEAD #放弃暂存区中所有的修改和新增
版本回退,慎用
git reset --hard HEAD #放弃当前所有修改,回退到当前版本
git reset --hard HEAD^ #回退到上一个版本
分支管理
查看分支
git branch #查看本地分支
git branch -a #查看所有分支
创建分支
git checkout -b xxx分支名字 #创建并切分支
git branch xxx分支 #创建
git checkout xxx分支 #切分支
合并分支到当前分支
git checkout master #切换到master分支
git merge xxx分支名字 #合并分支
删除分支
git branch -d # 删除已合并的分支,有未合并代码不允许删除
git branch -D # 强制删除有未合并代码的分支
git push origin --delete dev_new #删除远程分支
本地分支和远程分支第一次关联
git push origin xxx分支名字
合并远程分支(master分支之下)
git checkout master
git pull origin xxx分支名字 #远程拉取XX分支
git merge origin /xxx分支名字
git push
解决冲突
- CONFLICT => 表明该文件有冲突,被至少2人修改。
- 解决
- 查看日志,去线下和对应修改人员沟通,确定如何修改。
- 切忌在协作开发时,随意修改或者删除他人代码
现在我们在新建一个分支,dev1
git checkout -b dev1
查看
$ git branch
dev
dev1
master
我们在div1分支下,对文件里边的内容进行修改
然后上传
git add .
git commit -m"div1进行提交"
git checkout master
git merge dev1
git push
上传成功之后,我们在切换到dev分支之下,我们可以看到 div 分支之下的文件当中并没有我们在dev
分支之下的文件当中写的内容,现在我们重写一个新的内容
同样进行上传,但是当我们在合并分支的时候却出现
打开我们的文件
这说明我们产生了冲突,我们必须手动解决冲突,只需要我们保留我们想要的结果
更改完错误以后需要我们commit一下,然后上传
造成冲突的原图:
在不同分支之下,更改了相同的文件