程序员都要掌握的git!

118 阅读6分钟

git

一个工作中的场景 周一定档任务, 需要完成 1 2 3 周二 改变计划, 需要在原有的基础上 添加 4 5 6 周三 改变计划, 任务 6 目前无法完成, 所以需要完成 1 2 3 4 5 周四 改变计划, 任务 4 有一定的安全风险, 所以需要完成 1 2 3 5 周五 按时提交 1 2 3 5, 本周任务完成 周五晚上 12 点, 老板紧急修改任务为 1 2 3, 需要将 任务 5 删除

假定上边的不是代码, 而是需要书写的一个作文

  • 员工 A, 每次在修改计划的时候 都是在原有的文件上修改的
    • 等于最后提交的 1 2 3 5, 如果需要修改为 1 2 3, 那么需要找到对应的 5 然后删除
  • 员工 B, 每次修改任务的时候, 都是手动复制出来一个备份文件
    • 等到最后提交的时候, 员工 B 有很多个版本的文件
      • 1 2 3 版本
      • 1 2 3 4 5 6 版本
      • 1 2 3 4 5 版本
      • 1 2 3 5 版本
    • 周五提交的时候, 选择最后的一个 1 2 3 5 版本提交
    • 临时通知需要修改 1 2 3 的时候, 因为这个员工做了文件的缓存, 所以只需要找到对应的版本文件, 提交即可
  • 上述的故事主要表达 工作的任务会实时的变化, 然后如果代码让人去负责, 那么可能会出错, 并且不好维护
  • 所以目前我们都会选择一些专业的代码托管平台, 去维护管理我们的项目

代码托管平台

  • githubhttps://github.com/: 全球最大的代码托管平台, 但是服务器在国外, 国内的开发者访问的时候不太方便, 比较卡顿

  • gitlabhttps://about.gitlab.com/: 也是一个比较出名的代码托管平台, 但是是企业级, 一般我们去公司之后, 会使用, 自己个人不会使用

  • giteehttps://gitee.com/: 服务器在国内的一个代码托管平台, 然后我们目前在学习中, 只会使用这个平台

  • 上边三个都是一个平台而已, 你可以理解为一个 腾讯相册, 至于上传什么图片(你的代码 code), 取决于你自己

  • 上传方式我们统一都是依赖于 git

创建仓库

  1. 登录 gitee

  2. 在首页的右上角有一个 加号按钮, 移入之后弹出一个新的界面, 内部会有一个新建仓库的选项, 单击确认

  3. 进入到新建仓库页面后

    • 仓库名称和路径必须书写 (名称写完会自动补全路径, 一般不需要修改路径)
    • 仓库介绍 可写可不写
    • 设置是否开源 (默认是开源的)
    • 初始化仓库/设置模板/选择分支模型 都不需要处理
  4. 此时仓库已经创建完毕

  5. 配置 git 全局设置

    git config --global user.name "xxxgd"
    git config --global user.email "dguangda@163.com"
    
  6. 创建 git 仓库

    mkdir 2310_code         // 创建一个 2310_code 的文件夹
    cd 2310_code            // 终端路径进入到 2310_code 的文件夹
    git init                // 初始化一个 git 仓库
    touch README.md         // 创建一个 md 文件
    
    将 一个文件 提价到了远程仓库
    git add README.md
    git commit -m "first commit"
    git remote add origin https://gitee.com/ding-guangda/2310_code.git
    git push -u origin "master"
    

    // 我们实际需要执行指令

    1. git init 创建一个 git 仓库
    2. git add . 追踪所有的文件
    3. git commit -m "初始化仓库" 为 刚才追踪的文件 提交一个备注信息
    4. git remote add origin gitee.com/ding-guangd… 为当前的本地仓库配置一个远程仓库地址
    5. git push -u origin "master" 将本地仓库中的文件

    // 上边是第一次要执行的命令, 后续我们如果修改了文件, 需要重新上传

    1. git add .
    2. git commit -m '备注信息'
    3. git push
    

推荐的 git 插件 GitLens

新员工入职公司之后的流程

  1. 确保当前电脑已经安装过 git; (同时最好检测一下 node)
    • 检测指令: git --version
    • 官方安装地址: https://git-scm.com/download/win
  2. 问同事要 远程仓库的地址: https://gitee.com/ding-guangda/2310_code
  3. 进入到仓库地址的页面中, 找到中间的一个 克隆/下载 的图标,
    • 鼠标点击之后会有一个弹窗, 弹窗内有一个 下载 zip 和一个复制按钮
    • 一般程序员不会下载 zip, 会选择直接复制
  4. 在桌面或者你要将项目下载安装到文件夹 内右键, 选择 git bash
  5. 在 打开的终端中输入一个指令: git clone 刚才复制的地址(在git中复制=shift + ins)

员工到公司开发的流程

  1. git pull 确保自己本地仓库的代码是最新的, 所以拉取远程仓库最新的代码
  2. 开始编写我们今天的代码
    • 每完成一个功能, 或者修复一个 模块, 就执行一次 add 和 commit
  3. 等到今天最后一个任务完成(要准备下班了), 执行一次 完整的 add/commit/push

查询 提交记录

  • git log
  • 如果提交次数较多, 终端可能展示不全, 需要按回车继续展示新内容
  • 如果需要退出, 可以按下 :q

git 版本回退

  • git reset commitID: git reset 795380fb5e
  • 修改后重新提交,git push 后可能报错,需要git pull

处理开发冲突

  • 冲突是什么?
    • 其实就是两个人, 同时在两台电脑上编写了同一个项目同一个文件中同一行的内容

利用分支模拟一个开发冲突

  • 什么是分支
    • 正常在开发的时候, 我们的项目默认在 master 分支
    • 然后项目会拉出来一个 dev 分支, 所有的开发者的代码, 在经过测试之前, 全部上传到 当前分支, 不上传到 master
    • 但是一般开发者比较多的情况(比如三个以上), 会每个人再单独拉一个自己名字的分支, 当前分支只会存储自己的代码
  • 如何创建并切换到一个分支: git checkout -b 分支名

模拟流程

  1. 切换分支到 user_a

  2. 修改 xyj.md 的 第七行

    git add .
    git commit -m "user_a 产生的修改"
    git push --set-upstream origin user_a
    
  3. 切换分支回到 master : git checkout 分支名

  4. 切换分支到 user_b: git checkout -b user_b

  5. 推送 user_b 的修改内容

    git add .
    git commit -m 'user_b 的修改'
    git push --set-upstream origin user_b
    
  6. 此时我们的隐患已经基本成型

  7. 切换到 master 分支

  8. 合并 user_a 的代码到 master 分支: git merge 要合并过来的分支名

  9. 合并之后, 只是在本地将两个分支的代码合并, 远程仓库并没有收到影响

    • 如果需要将远程仓库的代码也修改, 直接执行: git push
  10. 合并完成 user_a 的代码后, 在合并 user_b 的代码, 到 master 分支 git merge 要合并过来的分支名

  11. 合并 user_b 的代码到 master 的时候, 必然会遇到一个冲突, 此时只需要考虑留下哪一个就行了

  12. 解决完成后, 将代码推送到远程

    git add .
    git commit -m '解决XXX冲突'
    git push
    

拉取gitee文件到本地

1.复制仓库的地址

2.打开终端输入git clone +地址