Git 实战

入门

什么是git

git 是一个分布式版本控制软件

  • 版本控制:类似于毕业论文,文案等,需要反复修改和保留原历史数据。
  • 分布式
    • 文件夹拷贝
    • 本地版本控制
    • 集中式版本控制
    • 分布式版本控制

版本控制

保留之前的所有版本,方便回滚和修改

安装git

官方安装步骤


基本步骤

初始化

Git 实战_第1张图片

想要让 git 对一个目录进行版本控制需要的步骤:

  • 进入要管理的文件夹
  • 执行初始化命令:git init
  • 查看管理目录下的文件状态
    git status
    
    
    #新增的文件和修改但未提交的文件显示红色
    
  • 管理指定文件(红色文件变绿)
    git add 文件名
    git add . #管理目录下所有文件
  • 个人信息配置:用户名,邮箱
    • 用于记录是谁生成了版本
    • 执行一次即可
  • git config --global user.email "xxxxx"
    git config --global user.anme "xxxxx"
  • 生成版本:提交
    git commit -m '描述信息'
  • 查看版本记录
    git log
    git log --graph //以图表形式显示
    //格式化图表方式显示,格式化内容是哈希值和记录
    git log --graph --pretty=format:"%h &s"

扩展新功能

git add
git commit -m '我干了啥'

回滚

  • 将所有的修改回到某次提交的状态
    git reset --hard 版本号(commit后的字符串)

    Git 实战_第2张图片

撤销

  • 先使用 git reflog查看包含回滚的日志信息,使用其中的版本号
  • 再使用 git reset --hard +版本号

Git 实战_第3张图片

命令总结

Git 实战_第4张图片


branch

分支概念

分支可以给使用者提供多个环境,用于把当前工作从开发主线上分离出来,而不影响主线。

场景:多人合作开发不同分支再合并 / 开发其他功能时紧急修复master主分区BUG

Git 实战_第5张图片

使用分支

  • 查看目前所在分支:git branch
  • 创建分支:git branch 分支名
  • 切换分支:git checkout 分支名
    • 创建并切换到分支:git checkout -b 分支名
  • 合并其他分支到当前分支:git merge 要合并过来的分支
    • 要切换分支后再合并
    • 可能产生冲突,需要手动解决
  • 删除分支:git branch -d xxx

工作流

分支至少要有两个

  • master 主分支:只用保留正式,稳定的版本
  • dev(开发) 分支:代码都在这儿写

Git 实战_第6张图片

github

push

上传代码到github

  • 给远程仓库起别名
    git romote add origin 远程仓库地址
  • 向远程推送代码
    git push -u 分支名称  #-u默认向master分支提交
    git push #按照上次-u指定的分支自动提交
    git push origin dev #手动指定提交的分支

clone

在别的电脑上下载代码

  • 克隆远程仓库代码
    git clone 远程仓库地址
  • 更新远程仓库的部分代码到本地
    git pull origin dev

场景实战

  • 在公司新电脑上下载代码
    git clone 远程仓库地址
    git checkout 分支 #切换分支
  • 下载完代码后继续开发
    • 切换到dev分支进行开发
    git checkout dev
    • 把master分支合并到dev(仅一次)保证dev代码是master中最新的
    git merge master
    • 修改代码
    • 提交代码
    git add .
    git commit -m '今天干了啥'
    git push origin dev
  • 下班回家继续写代码
    • 切换到dev分支进行开发
    git checkout dev
    • 代码从远程仓库拉下来
    git pull origin dev
    • 继续开发
    • 提交代码
    git add .
    git commit -m '回家干了啥'
    git push origin dev
  • 到公司继续开发
    • 切换到dev分支
    git checkout dev
    • 拉最新的代码(无需clone,只需要pull获取最新的即可)
    git pull prigin dev
    • 继续开发
    • 提交代码
  • 开发完毕要上线
    • 将dev分支合并到master, 进行上线
    git checkout master
    git merge dev
    git push origin master
    • 把dev分支也推送到远程保存代码
    git checkout dev
    git merge master
    git push origin dev

偶然事件

公司开发了一半的功能忘记提交代码

#代码写了一半
git add .
git commit -m '忘记提交到云端'
git push ..... #忘记push了

回家又开发了新代码后提交了

#写了其他代码
git add .
git commit -m '在家写了其他代码'
git push origin dev

到公司再次拉的时候会进行合并,合并时如果有共同修改的代码就会发生冲突

git pull origin dev
CONFLICT(content): Merge conflict in xxxx(冲突的文件)

冲突的代码两个记录都会保存下来, 需要手动解决冲突,解决完后继续开发

代码开发完
git add.
git commit -m '合并后开发完毕'
git push origin dev

命令总结

git pull拆分

git pull origin dev  //远程仓库到工作区

相当于:

git fetch origin dev  //从远程仓库拉到本地版本库
git merge origin/dev  //通过版本库更新到工作区

Git 实战_第7张图片

rebase变基

使git的提交记录变得简洁,不分叉

整合记录

很多时候中间的提交记录对别人是没有意义的, 因此把多个提交记录整合成一个记录

git rebase -i + 版本号   //把最新的版本到指定版本号版本中间的记录进行合并
git rebase -i HEAD~xxx  //把最新的版本往前xxx个版本之间的记录进行合并

出现的配置文本中,把版本号前的Pick改成需要的命令,并保存

如s :把本版本提交记录合并到上一个版本

Git 实战_第8张图片

保存后可以修改合并后的提交信息

Git 实战_第9张图片

注意: 不要合并已经push到仓库的版本的记录,和本地不一致造成麻烦

记录归并

把不同分支的提交合并

  • 切回到dev分支
    git checkout dev
  • 把master分支内容合并到dev, 并且代码也会拉下来
    git rebase master
  • 切换回master分支, 把 dev 合并回来
    git checkout master
    get merge dev

Git 实战_第10张图片

解决合并时分叉

从远程拉回有差异的代码时, 不使用 git pull , 将其拆成 fetch 和 merge,

其中 merge 时使用记录归并的方式

git fetch origin dev
git rebase origin/dev
rebase产生冲突

若 rebase 时产生冲突

Git 实战_第11张图片

    • 解决冲突 : git add ..
    • 解决后继续: git rebase --continue

byond compare 快速解决冲突

  • 在git中配置bc作为解决冲突的工具
    git config --local(只对当前项目有效) merge.tool bc  //bc 是给byond compare起名字
    git config --local mergetool.path '/xxx/xx/xx' //byond compare 安装目录
    git config --local mergetool.keepBackup false  //让bc 不保留原文件备份
  • 应用 bc 解决冲突
    git mergetool

多人协同开发

gitflow 工作流

Git 实战_第12张图片

github 中的实践

创建仓库

两种形式:合作者和组织

合作者

将用户添加到仓库合作者中,用户就能向仓库提交代码

通常个人使用此方式

Git 实战_第13张图片

组织

将成员邀请加入组织,组织下可以创建多个仓库,组织成员可以向组织下的仓库提交代码

通常企业使用此方式

Git 实战_第14张图片

Git 实战_第15张图片

基于Tag管理

使用版本的哈希值过于繁琐,因此使用正常人对版本的理解

  • 创建本地tag信息
git tag -a v1.0 -m '版本介绍'
  • 删除tag
    git tag -d v1.0
  • 本地tag信息推送到远程
    git push origin --tags
  • 更新本地tag版本信息
    git pull origin --tags
  • 切换tag
    git checkout v1.0
  • 下载指定tag的代码
    git clone -b v0.1 远程地址

邀请成员

进入组织

  • 默认只有读权限

Git 实战_第16张图片

成为项目合作者

  • 具有修改权限

Git 实战_第17张图片

成员开发

  • 代码下载下来
    git clone xxxx地址
    cd ..目录
    git checkout dev    #切换到dev分支
    git checkout -b 斗地主  #在dev上创建自己的功能分支
  • coding......
  • 提交代码
    git add .
    git commit -m '斗地主开发完成'
    git push origin 斗地主

code review

使用github中的 pull request实现

配置

设置代码review之后才能合并到dev分支

Git 实战_第18张图片

Git 实战_第19张图片

成员提交 code review 申请

Git 实战_第20张图片

Git 实战_第21张图片

组长做review

Git 实战_第22张图片

Git 实战_第23张图片

提测上线(预发布)

  • 基于 dev 分支 创建release分支
    git checkout dev
    git checkout -b release
  • 开始测试等操作
  • 合并到master
    使用pull request合并
    或
    本地将release合并到master分支
  • 在master分支打 tag
    git tag -a v2 -m '第二版斗地主功能'
    git push origin --tags
  • 运维人员下载代码进行上线
    git clone -b v2 地址

开源项目贡献代码

  1. fork源代码,源码拷贝到自己的仓库

    Git 实战_第24张图片

  2. 在自己的仓库进行修改代码
    1. 按照以前的流程:
      cd ... #指定目录
      git clone xxx #下载下来
    2. 修改代码
    3. 提交到自己仓库
      git add .
      git commit -m '改了BUG'
      git push origin master
  3. 给源代码作者提交 pull request 申请

    Git 实战_第25张图片

Git 实战_第26张图片

  • 对方就会进行审核

Git 实战_第27张图片


其他

git配置文件

项目配置文件

项目/.git/config

git config --local user.name '小明'
git config --local user.email '[email protected]'

全局配置文件

~/.gitconfig

git config --global user.name '小明'
git config --global user.email '[email protected]'

系统配置

需要root权限,用的少

/etc/.gitconfig

git config --system user.name '小明'
git config --system user.email '[email protected]'

应用场景

常用的配置

Git 实战_第28张图片


git免密登录

URL中实现

原来的地址:https://github.com/WuPeiqi/dbhot.git
修改成免密登录地址:https://用户名:密码@github.com/WuPeiqi/dbhot.git

git romote add origin https://用户名:密码@github.com/WuPeiqi/dbhot.git
git push origin master

SSH实现

企业用的多

  • 生成公钥和私钥
    ssh-keygen
    • 默认放在 /.ssh 目录下
    • id_rsa.pub是公钥
    • id_rsa私钥
  • 拷贝公钥内容,设置到github

    Git 实战_第29张图片

  • 在git本地配置ssh地址
    git remote add prigin xxx(ssh协议地址)
  • 以后直接使用

git自动管理凭证

本地用的多

git忽略文件

让git不去管理当前目录下的某些文件

  • 创建一个.gitignore文件
  • 在里里面直接写忽略的文件名
  • 或者使用通配符,子目录,正则等
    • *.h
    • !a.h
    • files/
    • *.py[a|b|c]

任务管理相关

issues

相当于是个讨论问题,反馈BUG,指定问题的类型,还能指派问题给谁

wiki

项目文档

你可能感兴趣的:(Git 实战)