一、快速入门
1. 什么是Git
Git
是一个分布式的版本控制软件。
- 软件,类似于QQ、office、dota等安装到电脑上才能使用的工具
- 版本控制,类似于毕业论文、写文案、视频剪辑等,需要反复修改和保留原历史数据
- 分布式
- 文件夹拷贝
- 本地版本控制
- 集中式版本控制
- 分布式版本控制
2. 为什么要做版本控制
要保留之前所有版本,以便回滚和修改
3. 安装git
- 针对不同系统的安装详见:
https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git
二、版本控制–Git管理文件夹
想要让git
对—个目录进行版本控制需要以下步骤:
-
进入要管理的目录
-
执行初始化命令
git init
-
检测当前目录下文件状态
git status 注:新增的文件和修改过后的文件都是红色
-
管理指定文件(红变绿),
.
代表当前目录下没有被管理的所有文件。红色:新增的文件/修改了原老文件,其次执行git add .(变绿色)。绿色:git已经管理起来了,其次执行git commit -m ‘描述信息’。最后生成版本。git add 文件名 git add .
-
个人信息配置:用户名、邮箱【一次即可】
git config --global user.email "you@example.com" git config --global user.name "Your Name"
-
生成版本
git commit -m '描述信息'
如果你对里面文件修改了,那么执行上述命令再次操作让其生成V2版本 -
查看版本记录
git log
2.1 Git 三大区域
2.2 回滚
-
回滚至之前版本
git log git reset --hard 版本号
第三个功能就会被git自动替换掉 -
回滚至之后版本
git reflog git reset --hard 版本号
2.3 分支
分支可以给使用者提供多个环境,意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
-
查看分支
git branch
-
创建分支
git branch 分支名称
-
切换分支
git checkout 分支名称
-
分支合并
首先切换到要合并的分支上:git chechout master git merge 想要合并的分支 git merge bug 把bug分支合并到master 注意:切换分支在合并
紧急修复完后其实,bug分支就没有用了 -
删除分支
git branch -d 分支名称
2.4 工作流
创建dev分支,在dev分支上去写开发的新功能,开发没有问题了,合并到master分支
2.5 基于github代码托管
- 注册github账号
- 创建仓库
- 本地代码推送
# 1.给远程仓库起别名
git remote add origin 远程仓库地址
# 2.向远程推送代码
git push -u origin 分支
2.5.1 初次在新电脑下载代码
# 1.克隆远程仓库代码
git clone 远程仓库地址(内部已实现git remote add origin 远程仓库地址)
# 2. 切换分支
git checkout 分支名称
- 在新电脑下载完代码后,继续开发
# 1.切换到dev分支进行开发
git checkout dev
# 2.把master分支合并到dev(仅一次)
git merge master
# 3.修改代码
# 4.提交代码
git add .
git commit -m 'xxx'
git push origin dev
2.5.2 在原先旧电脑继续写代码
# 1.切换到dev分支进行开发
git checkout dev
# 2.拉代码
git pull origin dev
# 3.继续开发
# 4.提交代码
git add .
git commit -m 'xxx'
git push origin dev
2.5.3 在新电脑上继续开发
# 1.切换到dev分支进行开发
git checkout dev
# 2.拉下最新代码(不必填clone,只需要通过pull获取最新代码即可)
git pull origin dev
# 3.继续开发
# 4.提交代码
git add .
git commit -m 'xxx'
git push origin dev
开发完毕,上线
# 1.将dev分支合并到master,进行上线
git checkout master
git merge dev
git push origin master# 2.把dev分支也推送到远程
git checkout dev
git merge master
git push origin dev
2.6.4 忘记推送代码
注:忘记了推送代码,后面合并起来可能会发生冲突
- 在新电脑开发
# 写一个a1.py编辑
vim a1.py
# 内容为:在新电脑开发了50%功能,有女神约饭忘记提交代码
- 在旧电脑开发
# 在旧电脑写了其他的功能,写了个a2.py,a1.py
vim a2.py
内容为:其他功能
vim a1.py
内容为:在旧电脑写了其他功能
- 再到新电脑拉代码(可能会产生一些冲突,因为:因为有一些代码提交到本地了,还没有提交到github)
因为在旧电脑编写了a1,a2在新电脑没有编写a2所以a2会自动合并,a1在新旧电脑都有编辑,可能改的同一行就可能产生冲突 - 解决冲突
- 在新电脑打开a1-----》vim a1.py,会发现把两个记录保留合并了
- 解决完后,继续开发
在新电脑上vim a1.py
,内容为:在公司开发了50%,再继续开发50%
- 最后
git add .
git commit -m 'xxx'
git push origin dev
- 上线,把dev合并到master,然后把master推送到线上
补充:
git pull origin dev # 从代码仓库拉代码
等价于下面两条命令:
git fetch origin dev
git merge origin/dev
为什么看下图:
2.6 rebase(变基)应用场景
作用:可以保持git提交记录简洁,不分叉
- 第一种:多个记录整合成一个记录
注意事项:合并的是那些没有提交到仓库的那些记录
- 第二种:有点像合并
记录图形展示
git log --graph --pretty=format:"%h %s"
- 先切回到dev分支
- git rebase变基(变成一个基本的树干),然后把master放进来。git rebase master
- 最终的代码是放在master分支的,所以切换到master,然后再git merge 到dev。git checkout master, git merge dev。
- 这样提交就变成一条线了
- 第三种:可能会产生分叉(往下来拉代码会与本地代码无形的进行一次合并,一样的就会冲突,不一样的就会自动合并)
- 原来往下来拉是git pull ,
- 为了避免分叉,执行git fetch将代码拉下来
- 这样拉下来会与本地合并,所以用git rebase就可以了。git rebase origin/分支
总结:
先不用git pull origin 分支名称,用git fetch origin 分支名称。紧接着用git rebase origin/分支名称
- 注意事项
在执行git rebase时----》冲突
解决:会提示你执行比如git add 1.py啥的,执行完在执行git rebase --continue
2.7 快速解决冲突
-
- 安装beyond compare
查看compare安装路径
- 安装beyond compare
-
- 在git中配置
--local:只在当前项目有效
git config --local merge.tool bc3 # 合并工具变成bc3 git config --local mergetool.path '/usr/local/bin/bcomp' # 这个路径就是compare的安装路径 git config --local mergetool.keepBackup false # 解决冲突的时候不用保留源文件
- 在git中配置
-
- 应用beyond compare 解决冲突
git mergrtool