• git2:git概述


    1.简介

    • git分布式版本控制系统 性能优越
    • 什么是版本控制?
      记录文件内容变化(可以让用户查看文件历史版本)
      方便版本切换
    • 公司中很多人修改代码,如何版本合并?
      用专业的版本控制工具
    • 集中式和分布式的区别?
      集中式:SVN
      集中管理服务器(保证修改的同一套代码)
      优点:管理员轻松对每个人管理
      缺点:每次必须等上一个人修改完成之后再改,单点故障
      分布式:Git
      分布式 每个人在自己的本地库做版本控制,代码托管中心(远程库),每个人都可以推到远程库中,无单点故障(本地也有版本控制)
      解决了问题:断网情况下我也可以版本开发,因为版本是在本地开发的,且每个客户端都保存了完整的项目(包含历史记录)
    • git发展
      linux开源,大神手动合并代码
      大神手动合并代码精力都不够
      自己用c语言开发了版本控制系统 Git管理
      开发了Github远程库,吸引了开源框架
    • git工作机制
      工作区:代码存放的地方
      暂存区(git追踪到代码add):将工作区的代码添加暂存区
      本地库(暂存区的代码提交本地库commit):生成对应的历史版本(不能单独删除某个版本,删库跑路)
    • 代码托管中心
      网络服务器的远程库(push):本地库推送到的远程库
      互联网:GitHub(外网)
      Gitee:码云
      局域网:GitLab(自己搭建服务器)

    2.git常用命令

    • 用户签名 代表本地git客户端
      git config --global user.name 用户名
      git config --global user.email 邮箱
    • 初始化本地库,git获取管理权
      在指定目录中执行git init
    • 查看本地库状态
      git status
      On branch master 在默认分支master中
      No commits yet 还没提交
      nothing to commit (create/copy files and use “git add” to track) 没什么东西提交
      红色代表没被追踪(工作区)
    • git add 文件名
      添加文件到暂存区即git追踪文件
      注意:linux换行符为 LF window换行符为CRLF
      而git默认linux行,故warning警告只是默认转换换行符
      此时绿色(当前已经追踪到该文件),但此时只是存在暂存区的文件,需要提交本地库
      可以删除暂存区
    • git commit -m “日志信息” 文件名提交本地库
      形成历史版本
      On branch master
      nothing to commit, working tree clean
      已经提交过了,没有东西需要提交,工作树干净
    • git reflog 查看历史记录
      查看版本
    • git log 查看详细的用户日志
    • git reset --hard 版本号 查看详细日志
    • 修改文件
      Changes not staged for commit:
      (use “git add …” to update what will be committed)
      (use “git restore …” to discard changes in working directory)
      modified: hello.txt
      文件被修改,红色代表不在工作区
    • 追踪add,提交commit(查看本地库状态又是干净)
    • 查看版本信息
      命令git reflog
      ed592ea (HEAD -> master) HEAD@{0}: commit: second commit
      c659e16 HEAD@{1}: commit (initial): first commit
      注意此时head指针指向第二个版本
    • git reflog 精简版日志
      git log 详细版日志

    3.命令 版本穿梭

    • git reset --hard 版本号
      git reflog 查看版本信息(获取版本号)
      git reset --hard 版本号 穿越回过去的版本
    • 保存了 版本号 和 分支
      底层保存了版本信息
      调用Head指针来指向具体的版本

    4.git分支操作

    • 什么是分支(测试分支,开发分支)
      一个分支为一个副本(即程序员可以把自己从开发主线上分离开来,开发自己的分支不会影响主线的运行)
      分支的底层也是指针的调用
      运行的过程中,可以从(用户用着)主分支中剥离一块功能出来到我们复制的分支,开发复制的分支,之后直接将开发的分支加如主分支中即可,开发过程中不影响主分支的使用
    • 分支的好处?
      并行推进多个功能开发
      某个分支失败,不会对整个程序有影响
    • git branch 分支名 创建分支
      git branch -v 查看分支
      git checkout 分支名 切换分支
      git merge 分支名 把指定的分支合并到当前分支上
    • 查看分支
      git branch -v
    • 创建分支
      git branch hot-fix
    • 此时master为用户使用分支,创建了一个热修分支,此时维护功能,切换分支
    • git checkout hot-fix
      修改功能之后
      再提交功能
      $ git commmit -m “hot-fix first commit” hello.txt
    • 此时hello.txt已经被修改
      且此时分支为hot-fix
    • 切换分支
      Switched to branch ‘master’(hot-fix没改之前的版本)
    • 分支合并(站在master分支上进行合并)
      git merge hot-fix
      此时hello.txt改成为为了hot-fix修改的文件
    • 什么时候会有冲突合并?
      合并分支时,两个分支在同一个文件的同一个位置两套不一样的修改,无法觉得使用哪一个,人为决定使用哪个内容?
      比如master 中在最后一行增加了内容
      比如hot-fix 中在倒数第二行增加了内容
      即两个分支都有修改,此时无法自动合并
      需要手动合并文件(只会修改master文件内容)
      <<<<<<< HEAD(master中的文件)
      hello atguigu! hello git!
      master test
      =======(hot-fix中的文件)
      hello atguigu! hello git! hot-fix test
      >>>>>>> hot-fix
      合并完成之后,需要添加到暂存区,提交
      git commit -m “merge test” 不能携带文件名
    • 合并分支底层也是指针
      HEAD:指向哪个分支(master)
      master分支指向哪个版本
    • git团队协作机制(代码托管中心)
      相同团队
      push(首个提交远程库,设置push权限)
      clone(程序员修改clone,有push权限即push上去修改代码版本)
      pull(拉取下来)
      不同团队
      fork(一个团队远程库到另一个团队远程库)
      clone,push
      Pull Request–>–>审核(看看)–>merge
      pull
  • 相关阅读:
    C#:计算机视觉与OpenCV 的目标
    四、T100生产管理之领退挪料管理
    大二Web课程设计:服装网页设计题材——HTML+CSS汉服文化带背景音乐素材带视频(12页)
    SpringBoot集成redis依赖包及步骤
    std::function
    Unity脚本生命周期 Day02
    D - Linear Probing- 并查集
    2023-9-8 求组合数(二)
    大模型管理工具Ollama搭建及整合springboot
    知识蒸馏学习
  • 原文地址:https://blog.csdn.net/qq_44724899/article/details/127935744