Git入门详细教程

一、Git概述🎇

Git官网

Git是一个开源的分布式版本控制系统,用于跟踪文件的变化和协作开发。它允许多个开发者在同一项目中共同工作,并能够有效地管理代码的版本和历史记录。Git可以帮助开发团队更好地协作,追踪代码变更,并且可以在需要时轻松地回滚到之前的版本。

1.1 什么是版本控制

版本控制是一种管理文件变化的系统,它可以跟踪文件的修改、添加和删除,并记录这些变化的历史。版本控制系统可以帮助团队协作开发,确保每个人都在同一个代码基础上工作,并且可以轻松地查看和恢复文件的不同版本。它还可以提供分支和合并功能,允许多个开发者并行地修改代码,并将这些修改合并到一个共同的代码库中。版本控制系统可以提高开发效率,减少错误,并且有助于保持代码库的整洁和可维护性。

1.2 版本控制工具

一些常见的版本控制工具包括:

  1. Git(GPT-3.5)
  2. Subversion(SVN)
  3. Mercurial
  4. Perforce
  5. CVS(Concurrent Versions System)
  6. Bazaar

版本控制工具又分为集中式版本控制工具分布式版本控制工具

集中式版本控制工具

集中化的版本控制系统诸如CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。

这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。

事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作

分布式版本控制工具

像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。

分布式的版木控制系统山现之后,解决了集中式版木控制系统的缺陷:

  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

1.3 Git简史

Git是由Linus Torvalds于2005年创立的分布式版本控制系统。Git的历史可以追溯到Linux内核开发过程中对版本控制系统的需求。在此之前,Linux内核的开发使用BitKeeper作为版本控制工具,但随着一些争议的出现,Linux社区需要一个开源的替代方案。

因此,Linus Torvalds开发了Git,并于2005年发布了首个版本。Git的设计目标是速度、数据完整性和分布式架构。它的发展得到了全球开发者社区的广泛支持,成为了目前最流行的版本控制系统之一。

Git的发展历程中,不断得到改进和扩展,吸引了全球开发者的参与,形成了一个庞大的生态系统。今天,Git已经成为了许多开源项目和商业项目的首选版本控制工具。

1.4 Git工作机制

工作区指的是存放代码的磁盘位置

1.5 Git和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。

局域网:

  1. GitLab

互联网:

  1. GitHub
  2. Gitee

二、Git安装🎊

根据自己的电脑选择合适的Git版本,本机为windows10 64位,基本上无脑下一步安装就行

选Vim就行,Notepad++也行

其它的不用改,直接下一步,然后安装,安装完成后,鼠标右键会有Git

bash 复制代码
git --version #查看git版本信息

三、Git常用命令🎃

命令名称 作用
git config --global user.name 用户名 设置用户签名
git config --global user.email 邮箱 设置用户签名
git init 初始化本地库
git status 查看本地库状态
git add 文件名 添加到暂存区
git commit -m"日志信息" 文件名 提交到本地库
git reflog 查看历史记录
git reset--hard 版本号 版本号版本穿梭

3.1 设置签名

右键打开Git Bash输入

arduino 复制代码
git config --global user.name "笑的像个child"
​
git config --global user.email "xxxxx@qq.com(自己的邮箱)"

3.2 初始化本地库

创建一个git-demo文件夹(后面的实验都基于这个文件夹),并右键进入git bash,并输入初始化命令

csharp 复制代码
git init

可以看到当前目录存在.git文件夹(看不到是因为它默认是隐藏的)

3.3 查看本地库状态

lua 复制代码
git status

新增文件

在git-demo下创建一个hello.txt文件,并在其中写入一行hello git,关闭并保存

再次查看本地库的状态,此时文件还只存在于工作区,并未添加至暂存区。

3.4 添加暂存区

将文件添加至暂存区,输入命令

csharp 复制代码
git add hello.txt 

也可以使用

csharp 复制代码
git add .  # .的意思是添加所有文件至暂存区。

添加完成后,再次查看本地库状态

此时,git已经追踪到了文件,此时如果你不想保存一个历史版本,是可以删除掉的。

bash 复制代码
git rm --cached hello.txt #将文件从暂存区删除(此时还没有记录历史版本,只有commit时才会有历史版本)

此处只是做实验,测试删除暂存区的文件,删除后,重新添加至暂存区,为后面的实验做准备

3.5 提交本地库

sql 复制代码
git commit -m "第一次提交" hello.txt

提交完成后,再次查看本地库状态,暂存区已经没有文件了

查看历史版本信息,

bash 复制代码
git reflog #查看历史版本

git log #可以查看更详细的提交日志

3.6 修改文件

修改hello.txt中的内容(只在第一行新增了一段字符串),再查看本地库状态,提示文件被修改

追踪修改添加至暂存区

提交本地库,并查看历史版本详细日志

提交文件后,提示一个文件被修改,一行新增,一行删除,是因为git中通过行来维护文件,修改一行,它无法表示,它是把修改之前的那一行删掉,再把修改之后的一行的内容新增进来。

3.7 历史版本

查看历史版本

bash 复制代码
git reflog #查看版本信息

git log #查看版本详细信息

版本穿梭

穿梭回第一个版本,并查看文件,已经回到第一个版本

perl 复制代码
git reset --hard "历史版本号"

穿梭回第二次提交的版本

四、Git分支操作🎄

命令名称 作用
git branch 分支名 创建分支
git branch -v 查看分支
git checkout 分支名 切换分支
git merge 分支名 把指定的分支合并到当前分支上

4.1 分支概述

Git分支是在Git版本控制系统中用于并行开发和管理不同功能或版本的代码的重要概念。分支可以让开发者在不影响主线代码的情况下,独立地进行开发、测试和修改。在Git中,主要的分支是master(或main)分支,它包含了项目的主要代码。除了主分支外,开发者可以创建其他分支,比如feature分支用于开发新功能,bugfix分支用于修复bug,release分支用于发布版本等。

分支的优势在于它能够提供一种安全的方式来进行并行开发,避免了直接在主分支 上进行修改可能带来的风险。同时,分支也可以帮助团队协作,每个成员可以在自己的分支上进行开发,最后合并到主分支上。

在Git中,创建、切换、合并、删除分支都是非常简单的操作,开发者可以根据需要随时创建新的分支,并在不同分支之间切换,以便进行不同的工作。因此,合理地使用分支可以帮助开发团队更高效地进行代码管理和开发工作。

4.2 查看分支

bash 复制代码
git branch -v #查看当前存在的的分支

4.3 创建分支

创建hot-fix分支后,再查看当存在的分支(当前还是在master分支)

arduino 复制代码
git branch "分支名"

4.4 切换分支

从master分支切换到hot-fix分支上

matlab 复制代码
git checkout hot-fix

分支已从master分支切换到hot-fix分支

4.5 修改分支

当前在hot-fix分支上,修改hello.txt文件,并将其提交本地库

4.6 分支合并

正常合并

sql 复制代码
git merge hot-fix

冲突合并

冲突产生的原因: 合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码内容

先在master分支下修改文件,然后切换到hot-fix分支下,然后再在同一行修改文件(修改内容可以随意),然后切换回master分支合并hot-fix分支

查看本地库状态

此时需要手动合并代码

查看hello.txt文件

解决冲突

将特殊符号删除,然后保留需要的片段,此处两段同时保留

重新提交文件

此时commit不能带文件名!!!不能带文件名!!!不能带文件名!!!

五、团队协作🎎

5.1 团队协作机制

团队内协作

简述:A和B是同一团队的成员,A将代码push至代码远程仓库,B可以将其clone下来然后修改,再push到远程仓库,A就可以pull下B修改的部分代码。

跨团队协作

A和C是同一开源项目的团队成员,B并不是,B觉得A的团队写的代码不够好,然后就fork了一份完整的代码(整个库),然后clone至本地,B将其修改优化后又push到他的远程仓库,然后发起pull request,开源团队进行审核,觉得B写的很好,就将他的代码进行merge,然后开源团队又将自己的代码进行更新。

六、Gitee操作🎨

6.1 推送本地库到远程库

GitHub这两天打开的实在是太慢了,我梯子又过期了,在此就使用Gitee进行演示了,都大差不差。

进入Gitee的个人主页点击创建

填写仓库基本信息,然后创建

设置别名

csharp 复制代码
git remote add "别名" "链接"

推送至远程仓库

perl 复制代码
git push git-test master

在本地修改了文件后还是先将其提交暂存区,本地库,然后再push一下就可以了

查看gitee仓库存在推送的文件

6.2 拉取远程库到本地

此时远程库的文件内容和本地的是不一致的

在git-demo中打开git,输入拉取的命令

arduino 复制代码
git pull "远程仓库的别名或链接" "分支名"

此时,本地的hello.txt文件已经更新和远程库的文件内容一致

6.3 克隆远程库到本地库

拉取远程库

先在自己电脑上随意找一个没有文件的位置,然后打开git

bash 复制代码
git clone "复制的链接"

仓库,文件都克隆成功

其它的项目都是这样,复制链接然后clone

七、自建GitLab代码托管平台🌭

GitLab官网

GitLab的历史可以追溯到2011年,当时由荷兰的程序员Sytske Sijbrandij和Dmitriy Zaporozhets共同创建了GitLab。最初,GitLab是作为一个开源项目发布的,旨在提供一个基于Web的Git仓库管理工具,以及一系列的协作工具,例如问题跟踪、持续集成和部署等。

随着时间的推移,GitLab逐渐获得了越来越多的用户和开发者的支持。2013年,GitLab发布了第一个企业版,为企业用户提供了更多的高级功能和支持服务。2015年,GitLab发布了自托管版本,使用户可以在自己的服务器上部署和运行GitLab。

GitLab持续不断地进行更新和改进,增加了许多新的功能和工具,如持续集成、持续部署、代码审查等,使其成为一个功能强大的代码管理平台。2017年,GitLab完成了一轮高达2000万美元的融资,进一步加速了其发展。

至今,GitLab已经成为了全球范围内广受欢迎的代码托管和协作工具,拥有庞大的用户群和开发者社区。它的开源版本和企业版都得到了广泛的应用,为软件开发团队提供了全面的解决方案。GitLab的发展历程充分展示了其不断创新和改进的精神,以及对用户需求的不断关注和满足。

7.1 服务器安装GitLab

GitLab下载安装_GitLab最新中文官网免费版下载-极狐GitLab

本人使用的是一台Centos7的服务器

下载/安装极狐GitLab

ruby 复制代码
curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash

开始安装

ini 复制代码
EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-jh

此处"gitlab.example.com"修改为服务器的地址并指定端口号

建议大家使用内存大一点的服务器,我的已经挂了,后续演示放在下一篇文章😅😅😅

参考资料

01尚硅谷 Git课程介绍哔哩哔哩_bilibili

相关推荐
散峰而望3 分钟前
基本魔法语言函数(一)(C语言)
c语言·开发语言·编辑器·github
oil欧哟10 分钟前
GitHub星标3万,OpenAI 官方支持——深度解读 AI Agent 连接协议的行业标准 MCP
人工智能·github
粟悟饭&龟波功22 分钟前
【GitHub热门项目】(2025-11-07)
github
一名爱学习的ikun1 小时前
如何将本地文件上传至Github?【详细解释】
github
百锦再2 小时前
第10章 错误处理
java·git·ai·rust·go·错误·pathon
用户221765927922 小时前
如何解决Spring Boot与其他框架集成时的版本冲突问题?
github
时光追逐者2 小时前
使用 GitDiagram 快速将 GitHub 仓库转换为交互式图表
ai·github
lkbhua莱克瓦2415 小时前
Java基础——常用算法5
java·开发语言·笔记·github
静心观复16 小时前
git revert 2
git
电摇小人16 小时前
GitHub 全方位指南(续):实战进阶与生态拓展
github