137 Git

本文详细介绍Git的安装、配置及基本操作,涵盖本地与远程仓库管理、分支操作、多人协同开发流程,适合初学者及进阶用户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、引言

  • 在单人开发过程中,需要进行版本管理,以利于开发进度的控制。
  • 在多人开发过程中,不仅需要版本管理,还需要进行多人协同控制。

二、介绍

  • Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
  • Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
  • 官网: https://git.scm.com/

三、Git安装

3.1下载Git

  • 下载Git https://git-scm.com/downloads

在这里插入图片描述

3.2安装

  • 安装,除了安装位置外,其他一直下一步即可

3.3基本配置

  • 安装后,打开cmd,自报家门

  • 如下信息会在提交代码时要使用,记录在你的每次提交中。以后才知道哪次提交是谁做的。

    git config --global user.name "Your Name" #用户名
    git config --g1obal user.email "emailoexample.com" #邮箱
    #查看信息
    git conf1g -l
    

3.4测试

  • 测试: cmd中执行,查看git版本

    git --version
    

四、架构

  • 版本库:工作区中有一个隐藏目录 .git,这个目录不属于工作区,而是git的 版本库,是git管理的所有内容
  • 暂存区:版本库中包含一个临时区域,保存下一步要提交的文件。
  • 分支:版本库中包含若干分支,提交的文件存储在分支中

在这里插入图片描述

五、仓库

  • 对应的就是一个 目录 ,这个目录中的所有文件被 git 管理起来。
  • 以后会将一个项目的根目录,作为仓库。
  • 仓库中的每个文件的改动都由 git 跟踪。

5.1新建仓库

  • 选择一个目录,执行指令: git init

在这里插入图片描述

5.2工作区

  • 执行git init的目录即为工作区,如上例,D:\repol 目录即为工作区 【不包含.git目录】
  • 所有文件,都首先在工作区新建,然后可以存入仓库(版本库),进行版本控制。

5.3暂存区

  • 暂存区也在 .git 目录内,工作区的文件进入仓库时,要先进入暂存区。

5.4分支

  • 版本控制,简单说,就是记录文件的诸多版本,分支就是这些版本的最终记录位置。

六、基本操作

6.1查看仓库状态

  • 执行 git status 可以看到工作区中文件的状态

    在这里插入图片描述

6.2暂存文件

  • 执行git add . 将工作区中的文件全部存入 暂存区

    在这里插入图片描述

6.3提交文件

  • 执行 git commit -m "这里写提交的描述信息” 作用是将暂存区的文件存入分支,形成一个版本

    在这里插入图片描述

七、远程仓库

  • 第5章中的仓库,其实是本地仓库。
  • 当多人协同开发时,每人都在自己的本地仓库维护版本。
  • 但很重要的一点是,多人之间需要共享代码、合并代码,此时就需要一个远程仓库。

7.1远程仓库工作模式

在这里插入图片描述

7.2远程仓库选型

  • 有很多远程仓库可以选择,比如github( https://github.com/ ),码云( https://gitee.com/); (这是Git服务器)
  • 此两种可以注册自己测试使用,但如果是商业项目,需要更多支持需要付费。
  • 公司内部也可以有自己构建的远程仓库( http://qianfeng.qfjava.cn:8087/users/sign_in)。

7.3基本操作

  • 每个开发人员,在面对远程仓库时,会面临的一些基本操作。
7.3.1注册git服务器账号
  • 在 码云 注册账号,并登录。

  • 进入公司后,很可能会使用公司自己搭建的git服务器,则账号向领导索要即可

在这里插入图片描述

7.3.2新建远程仓库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.3.3本地关联远程仓库
  • 本文档中选用仓库的https协议的地址,将此地址关联到本地git中

  • 语法:git remote add origin https://gitee.com/wlw330/git_wlw.git(这个连接是远程仓库的地址)

    remote(远程),origin(远程名)

    在这里插入图片描述

7.3.4推送文件到远程仓库
  • 将本地仓库中已经commit的内容push到远程仓库,以共享自己的代码。

  • 语法:git push origin master

    origin(远程名,也可以理解为远程仓库的表示),master(分支名)

    在这里插入图片描述
    在这里插入图片描述

7.3.5克隆远程仓库
  • 如果仓库已经由别人创建完毕,我们需要其中的内容,则可以通过git clone将其复制到本地。

  • 语法:git clone https://gitee.com/wlw330/git_wlw.git

    在这里插入图片描述

7.3.6代码共享
  • 多人协同开发时,写好代码的 git push 上传到远程仓库; 需要代码的git pull拉取代码即可。

    在这里插入图片描述
    在这里插入图片描述

7.3.7命令汇总
命令描述
git remote add 标识名(origin) 远程地址本地关联远程仓库
git push 标识名 master将本地仓库内容上传到远程仓库
git pull 标识名 master从远程仓库下载内容到本地仓库
git clone 远程地址将远程仓库复制到本地,并自动形成一个本地仓库(初始时使用)

八、分支

8.1分支简介

  • 分支,是一个个版本最终存储的位置。

  • 分支,就是一条时间线,每次 git commit 形成一个个版本,一个个版本依次存储在分支的一个个提交点上。

  • 一个注意点:如果新的一次修改只是添加文件,对之前文件并没有进行更改,则新的提交点中还是有全部文件,只不过是保存了之前文件的一个链接,真实文件还是保存在上一个提交点中(会有所有文件的完整信息,只不过只有哪些真正改动的文件才会被实际存储,哪么没有改动的文件只会存一个链接)

在这里插入图片描述

8.2分支操作

8.2.1查看分支
  • 查看当前仓库的分支 git branch

  • 仓库中默认只有 master 分支

  • 执行 git commit 时,默认是在master分支上保存版本。

在这里插入图片描述

8.2.2创建分支
  • 在商业项目开发过程中,我们不会轻易的在master分支上做操作。

  • 我们会新建一个开发用的分支,在此分支上做版本的记录。
    当代码确实没有问题时,才会将开发分支上成熟的代码版本添加到master分支上。

  • 保证开发过程中,可以及时记录版本,又保证master分支上每个提交点都是稳健版本。

  • 语法:git branch name(分支名,自己定义)

    在这里插入图片描述

8.2.3切换分支
  • 默认情况下,当前使用的分支是master分支

  • 可以切换到dev分支,则后续的 **git commit **便会在 dev分支上新建版本(提交点)

  • 语法:git checkout name(分支名,自己定义的)

    在这里插入图片描述
    在这里插入图片描述

8.3新建分支细节

  • 新建分支时,新分支,默认有哪些内容?分支中包含了哪些次提交?
8.3.1新分支初始内容
  • 每个分支都有一个指针,新建一个分支, 首先是新建一个指针

  • 而且新分支的指针会和当前分支指向同一个提交点

  • 新分支包含的提交点就是从第一个提交点到分支指针指向的提交点。

在这里插入图片描述

8.3.2多分支走向
  • 在master分支和新分支,分别进行 git addgit commit

  • 分支情况如下图:

    在这里插入图片描述

8.3.3分支提交日志
  • 查看分支的提交日志,进而看到分支中提交点的详细情况。

  • 语法:git log --oneline(简易日志)、git log (完整日志)

在这里插入图片描述

8.4分支合并

  • 两个分支内容的合并
  • git merge 分支a 合并分支a
  • 合并的方式有两种:快速合并和三方合并。
8.4.1快速合井
  • 如果分支A当前的修改,是完全基于分支B的修改而来,则B分支合并A分支, 就是移动指针即可。

  • 注意点:要先切换回主分支(git checkout master),然后再合并(git merge dev)

    在这里插入图片描述

8.4.2三方合并
  • 在不具备快速合并的条件下,会采用三方合并。

  • 三方合并语法还是:git merge dev (只不过内部执行不同)

在这里插入图片描述

8.4.3合并冲突
  • 两个分支进行合并,但它们含有对同一个文件的修改,则在合并时出现冲突,git无法决断该保留改文件哪个分支的修改。
8.4.3.1冲突演示
  • 场景模拟如下:

    在这里插入图片描述

  • 在master分支合并dev分支

    在这里插入图片描述

  • 此时,打开hig.txt 文件:

在这里插入图片描述

8.4.3.2冲突解决

出现冲突后,如要由两个开发人员当面协商,该如何取舍,为冲突文件定义最终内容。
解决方案:

  1. 保留某一方的,删除另一方的
  2. 保留双方的
  3. 但无论如何,要记得删除<<<< ==== >>>>这些
  4. 本质是两人协商为冲突的内容,定制出合理的内容。

在这里插入图片描述

九、Idea关联Git

9.1关联Git

  • File > Settings关联过程是自动的

在这里插入图片描述

9.2创建仓库

  • 新建项目后,将项目目录创建为git仓库

  • 注意:要在建仓库前,设置忽略文件".gitignore"

  • 作用:被忽略的文件会被版本记录忽略,版本中不包含它们。

  • 范围:不需要和其他开发共享的文件,具体见下图。

    在这里插入图片描述
    在这里插入图片描述

9.3提交-commit

  • 创建好仓库后,做第一次提交。

    在这里插入图片描述
    在这里插入图片描述

9.4创建分支

  • 新建分支

    在这里插入图片描述
    在这里插入图片描述

9.5.上传到远程仓库(push)

  • 请首先参照第7章,创建一个远程仓库。

  • 要求是裸库,且建议库名和项目名同名。

    在这里插入图片描述
    在这里插入图片描述

9.6复制到本地仓库(clone)

  • 如果有建好的远程仓库,比如公司内已经在用的仓库,或者github, 码云上的一些公开仓库,可以将远程仓库的项目复制到本地使用。

    在这里插入图片描述

9.7更新本地项目(pull)

  • 如果远程仓库有更新,则你的本地项目也需要一起更新。

    在这里插入图片描述

9.8冲突解决

  • 合并分支时,如果出现冲突,则需要解决冲突。

    在这里插入图片描述

十、多人协同开发

  • 多人开发协同,git操作

10.1项目管理员(项目经理)

  • 1>由管理员负责创建一个远程库,初始的库中什么也没有,为裸库。库的名称建议和项目同名

  • 2>管理员会在idea中创建一个初始项目,其中包含**.gitignore文件。并在项目根目录下建立本地库**。并建立dev分支。

  • 3>管理员将本地库上传到远程库

  • 4>将其他开发人员拉入远程库的 开发成员列表 中,使得其他开发人员可以访问该远程库。
    流程如下:

    在这里插入图片描述
    在这里插入图片描述

  • 5> master分支设置为protected分支, 只有管理员有权限将代码合并到其中。dev分支设置为常规分支所有开发人员都可以其中合并代码

    在这里插入图片描述
    在这里插入图片描述

10.2开发人员

  • 初始化:在idea中 **clone **远程库,获得项目。会建立本地库
  • 后续的开发中,都要在dev分支上进行。开发完一个功能并测试通过后就commit提交到本地的dev分支中,然后上传**(push)**到远程dev分支中。
  • 需要更新项目内容时,通过pull从远程仓库拉取内容。
  • 注意:多人协同时,每次在push到远程库前,都先做一 次pull, 一来是把远程最新内容合并到本地,二来是核实本地内容是否和远程内容有冲突。
  • 后续的开发,会接到一个个的功能任务,往复操作2>、3>、 4>而已。

十一、经典问题

  • 在使用httpst协议做push时,如果曾经使用过码云,但密码有过改动,此时会报错

    在这里插入图片描述

  • 解决方案:控制面板》凭据管理器》删除对应凭证, 再次使用时会提示重新输入密码。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悬浮海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值