• Git版本管理


    ❤️ Author: 老九
    ☕️ 个人博客:老九的CSDN博客
    🙏 个人名言:不可控之事 乐观面对
    😍 系列专栏:

    Git简介

    • Git是目前世界上最先进的分布式版本控制系统。那么什么是版本控制系统呢?版本控制系统类似于当你使用word文档的时候,想修改某一个段落,但是又怕恢复找不回来。这时候就会另存为,出现多个副本。一周之后会有很多个文件,这样会很乱。
    • 所以git就是管理文件的变更

    集中式与分布式

    • svn是集中式版本控制系统,而git是分布式版本控制系统。
    • 集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候都是用的自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,活干完了,再集中把干完的活推送到中央服务器。集中式版本控制系统的最大的坏处就是必须联网才能工作,速度非常慢。
    • 而分布式版本控制系统,首先它和集中式的最大区别就是没有中央服务器了,每个人的电脑上都是一个完整的版本库。这样的话会更安全,一个人的电脑坏了不要紧,随便从其他人那里复制一个就可以了,集中式的话如果中央服务器出了问题,所有人的活都没法干了。

    版本库

    • 版本库可以理解为一个目录,这个目录里面的所有文件都可以被git管理起来,每个文件的修改,删除git都能跟踪,以便时时刻刻都能追踪历史。

    分支管理

    • 假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了百分之50的代码,如果你立刻提交,由于代码还没有写完,不完整的代码库会导致别人不能干活。如果等代码全部写完再提交,又会丢失进度。
    • 现在你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,你在自己的分支上干活,想提交就提交,直到开发完毕之后,再一次性合并到原来的分支上。速度也是非常的快。
    • 在Git里,master分支叫主分支,用于正式发布。develop用于日常开发的分支。
    • 辅助分支(临时分支):feature,fix。feature是功能分支,fix是修补bug的分支。
    • HEAD指向当前分支,本质上是指针,不对文件本身造成影响。

    常见的分支操作

    • fetch:从远程仓库拉到本地仓库,用户在检查了以后决定是否合并到工作本机分支中
    • pull:是将远程仓库的最新内容拉下来后直接合并,这样有可能会产生冲突,需要手动解决。
    • commit:是提交到本地,并没有提到到远程仓库
    • push:将代码提交到远程的仓库

    冲突

    • 当master分支上分开了一个feature分支,这时候master分支和feature分支各自都分别有了新的提交,这是合并的时候就有可能会产生冲突。我们需要手动解决完冲突之后,选择合适的代码再提交。

    工作区于暂存区

    • 工作区就是你在电脑里能够看到的目录。工作区里有一个隐藏的目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存放了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
    • add之后是进入暂存区,commit之后是进入分支
      在这里插入图片描述
    • 可以简单的理解为,需要提交的文件修改统统放到暂存区,然后一次性提交暂存区的所有修改提交到分支。

    远程仓库

    • 使用远程仓库来支持团队的协作,先有一个原始的版本库,协作中所有人的代码库都是从远程仓库克隆一份到自己的本地。每个人把自己的代码提交到远程仓库中(push),并从远程仓库中拉取别人的提交(pull),简单的理解Merge Request就是发出将自己的分支合并到远程分支上的请求。

    忽略文件

    • 通过.gitignore,从而可以忽略自动生成的文件,忽略编译生成的文件,忽略含有敏感信息的文件。
    • .gitignore 语法:
      以’#'开始的行,被视为注释.
      忽略掉所有文件名是 foo.txt的文件.
      foo.txt
      忽略所有生成的 html文件,
      *.html
      foo.html是手工维护的,所以例外.
      !foo.html
      忽略所有.o和 .a文件.
      *.[oa]
      如 build/ 表示Git会忽略 build/ 目录下的所有文件

    Git

    • git是一个版本控制软件,对一个文件的多个版本进行管理。source control manager(资源控制管理)

    git init(初始化)

    • 首先输入这个命令,创建一个.git文件夹
    • 在某个文件夹初始化一个仓库(一份代码执行一次)
      在这里插入图片描述
    • git init --bare
    • 相当于创建了一个.git的文件在这里插入图片描述

    git config

    • git config --global user.name “name”
    • 配置全局用户名(存在~/.gitconfig文件内)
    • git config --global user,email “email”
    • 配置全局用户的邮箱

    git status

    • 查看状态(暂存区(stage)与工作目录之间差别)
      在这里插入图片描述

    git add

    • 放在暂存区
    • git add .这样就把当前文件夹所有的文件都放在暂存区里了
    • 暂存区不在工作目录里面,在.git文件夹里面(index文件)

    在这里插入图片描述

    git commit

    • git commit -m "xxx"
    • 提交到分支上面,将暂存区的内容保存为一个版本
    • 100644中,644代表的二进制是110100100,代表rw-r–r–,rw-代表当前用户可读可写不可执行,第二个r–代表用户组(用户组是linux中的名词,用户组是除自己的所有用户)对这个文件的权限只能读,第三个r–是超级用户对这个文件的权限是只能读
    • 在linux服务器上,有一个命令叫chmod 777 ,就可以把644的rw-改成rwx,可执行是绿色的
      在这里插入图片描述
    • 如果想不想先add一下再提交(前提是add过一次),而是直接提交的话,使用命令git commit -a -m "xxx 即可实现
      在这里插入图片描述

    git log

    • 查询日志
    • 下面那个commit 后面那一串,是运用了sha1算法,将下面的信息进行了加密,得到的序列号
    • 要退出的话,按q(quit)退出编辑模式在这里插入图片描述

    git show

    • 如果想查看提交的具体内容信息,可以通过git log命令commit后面的内容,查看具体的提交信息
      在这里插入图片描述

    git diff

    看到工作区的文件和暂存区的文件哪里不同
    在这里插入图片描述

    • git diff --cached
    • 这个命令可以看到 暂存区和最后一次提交的分支有什么区别
      在这里插入图片描述

    git remote add

    • 把远程仓库拉到本地
    • origin就是一个名字
      在这里插入图片描述
    • 可以看到已经拉到本地的远程仓库
      在这里插入图片描述

    git remote remove

    • 把拉过来的远程仓库删掉

    在这里插入图片描述

    git push -u

    • 推送master分支上的内容
    • -u是将本地分支与远程分支之间建立追踪关系,这样以后就可以使用git push和git pull来同步本地和远程分支,不必再指定远程仓库的分支名称‘
    • 如果git push origin master:limingpu,这样是在master分支上创建了一个新的分支,然后在limingpu这个分支上进行操作,第一次push的时候,如果上级没有给你创建新分支,你就直接这么push是可以的,之后就用limingpu这个分支就可以了。
      在这里插入图片描述

    git pull

    • 把远程代码拉到本地,但需要重新add和提交
    • git pull --rebase xxx 这样就是拉取代码的同时进行变基,如果不加–rebase的话就会merge,这样不好。
      在这里插入图片描述

    git clone

    • 把远程仓库克隆到本地
    • git clone <地址>
      在这里插入图片描述

    git branch xxx

    在这里插入图片描述

    git branch -m

    • 重命名分支
      在这里插入图片描述

    git checkout

    • 切换分支
      在这里插入图片描述

    git stash / git stash pop

    • git stash是将自己写的代码先放在暂存区,然后拉取别人最新的代码,建议使用git pull --rebase,其中–rebase是变基操作,如果不写–rebase变基的话就会行使merge操作,这样是不对的,之后通过git stash pop合并我们的代码

    出现冲突

    在这里插入图片描述

    • 如果出现冲突,先把自己的代码add,commit,然后pull远程的代码,然后手动解决冲突,把git自动写的注释给删掉,之后如果没有冲突了,就自动上传,或者再自己push一下。

    git reset

    • git reset --hard xxx 这个是自动给你commit了,不需要自己commit,直接就git push – force就可以了
    • git reset --soft xxx 这个需要自己add commit ,可以看到修改的记录,自己手动修改完之后,再–force就可以了
    • git reset xxx 之后需要用git push --force来强制提交,用来覆盖之前的历史记录
    • git reset --soft HEAD~1,这个是commit过了之后,回滚一次提交。
    • commit过了或者push过了,都用reset

    github

    blame

    在这里插入图片描述

    • 点击blame可以看到每一行都是谁写的
      在这里插入图片描述

    总结

    1.git和svn的区别
    git是分布式的,svn是集中式的 。因此我们不能在离线的情况下使用svn,如果服务器出现了问题,我们就没有办法使用svn提交我们的代码。
    svn的分支是整个版本库的复制的一份完整目录,而git的分支是指针指向某次提交,因此git分支创建开销更小,并且分支上的变化也不会影响到其他人。
    git的内容存储使用的是哈希算法,这能确保代码内容的完整性,网络故障等降低对版本库的破坏。
    2.git常用的命令
    git init
    git add
    git rm//删除工作区文件,并将这次删除放入暂存区
    git commit -m[message]
    git branch//列出所有分支
    git checkout -b[branch]//新建一个分支,并切换到该分支
    git status//显示有变更文件的状态
    3.git pull 和git fetch 区别
    git fetch指挥将远程仓库的变化下载下来,并没有和本地分支合并。
    git pull会将远程仓库的变化下载下来,并和当前分支合并
    4.git rebase 和git merge的区别。
    git merge 和 git rebase 都是用于分支合并,关键在 commit 记录的处理上不同:
    ● git merge 会新建一个新的 commit 对象,然后两个分支以前的 commit 记录都指向这个新 commit 记录。这种方法会保留之前每个分支的 commit 历史。
    ● git rebase 会先找到两个分支的第一个共同的 commit 祖先记录,然后将提取当前分支这之后的所有 commit 记录,然后将这个 commit 记录添加到目标分支的最新提交后面。经过这个合并后,两个分支合并后的 commit 记录就变为了线性的记录了。

    在这里插入图片描述
    5.revert和reset的区别
    git revert 是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
    git revert 的head是继续前进,git reset是把head向后移动了一下
    如果回退分支的代码以后还需要的话使用git revert,如果是错误代码不想被别人看到,则使用git reset
    ————————————————————————
    ♥♥♥码字不易,大家的支持就是我坚持下去的动力♥♥♥
    版权声明:本文为CSDN博主「亚太地区百大最帅面孔第101名」的原创文章

  • 相关阅读:
    2023年9月上旬大模型新动向集锦
    离子液体修饰高分子微球,小球集合型(FPC)poly(St-co-VEIB)微球和中空微球集合型(FHMC)poly(St-co-VEIB)微球
    IDEA远程断点调试jar包项目
    使用 Java 枚举和自定义数据类型
    SpringBoot部署到外部Tomcat无法注册到Nacos服务端
    软件工程——设计模式之创建型模式(单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。)
    Bootstrap中固定某一个元素不随滚动条滚动
    Java NIO 通信基础
    [论文必备]最强科研绘图分析工具Origin(2)——简单使用教程
    35、Docker 镜像仓库
  • 原文地址:https://blog.csdn.net/partworld/article/details/126438169