git基础概念

git简介

Git 是一个当代最先进、最主流的分布式版本控制系统,它用于追踪文件的变化历史,特别适用于程序员和团队协作开发的场景。

通过Git,我们可以记录文件的每一次修改,并能随时回溯到历史版本。这就像是我们给文件装上了一个“时间机器”,可以随时查看和恢复到过去的状态。并且,如果是多人同时编辑文件,Git 会帮你合并不同人的修改,避免覆盖和冲突。

因此,Git 就像是一个“超级版的文件管理器”,它不仅能帮你管理文件的历史版本,还能让你和团队成员高效地协作开发、解决冲突。

所以,对于程序员来说,Git是开发流程中不可或缺的一部分。只要你是一个程序员,或者你想要从事计算机行业,那么Git 都是你必须学会的基础技能。

git的基本概念

仓库

存储和管理文件的地方,里面保存另所有的文件、版本记录和历史信息

本地仓库:自己的极其或电脑上创建的仓库,存储着本地对项目的所有文件和修改历史,每当提交代码时,git会将文件保存在本地仓库中

远程仓库:存放在服务器上的仓库,通常用于团队合作中的代码共享和同步(如:github)

工作目录

当前正在编辑的文件所在的地方,对文件进行的修改都发生在工作目录中。

它就像是“项目文件”,里面有正字啊开发的代码和其他资源。当修改了文件时。修改只会体现在工作目录中。git不会立即跟踪这些修改,直到将它们添加到暂存区并提交。

暂存区

一个临时的存放区,用来记录准备提交的文件的修改,当在工作目录中修改文件后,需要通过’git add’命令将这些修改添加到暂存区,之后在通过git commit命令提交修改,暂存区的内容就会被保存到本地仓库

master和HEAD

在git中,master(或main)是默的主分支。当创建一个新的git仓库时,git默认会有一个分支,这个分支的名字在较早的git版本中是master,在新版本中默认使用main作为主分支名称

HEAD代表“当前所处的位置”,它是一个指针,指向正在工作的分支的最新提交。例如,多次执行了git commit提交操作,那么就会形成一条时间线,每次提交完,HEAD就会移动到当前分支的最新一次提交的位置

分支

git分支就像一颗大树,主干就是项目的主分支(通常是master或main),这跳主干代表项目的主要发展方向,也就是所有代码的基础。

当要开发一个新功能或者修复bug时,就像给树长出一根新树枝,这根树枝就是从主干分叉出来的,独立与主干,不会影响主干的健康成长。

当在树枝上完成了开发,并且确认这部分改动没问题,就可以把这根新枝干融入主干,变成主干的一部分

git的操作与命令

git配置文件

在git安装完成之后,需要对git进行一些配置操作。而在这之前,需要先来了解git的三个主要的配置文件。

  1. 系统全局配置(-system):包含了系统内的所有用户和所有仓库的配置信息,系统配置存放在Git安装目录下C:IProgram Files|Gitletclgitconfig。

  2. 用户全局配置(-global):包含了当前用户的所有Git 仓库配置,它存放在用户目录下:C:Nsersl[系统用户名J。gitconfig。

  3. 仓库配置(-local):仓库级配置仅适用于某个 Git 仓库,它存放在项目目录下:项目根目 #/。git/config

三个配置文件的优先级为:系统全局配置<用户全局配置<仓库配置

配置命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看当前git 配置的所有信息
git config --list git config -l

# 查看系统全局配置
git config --system --list

# 查看当前⽤户全局配置
git config --global --list

# 查看当前仓库配置信息
git config --local --list

# 配置⽤户名和邮箱
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

git基本操作

初始化和创建仓库

1
2
#初始化仓库
git init

文件的跟踪与管理

添加到暂存区

1
2
3
4
5
# 添加所有⽂件
git add .

# 添加指定⽂件
git add filename

提交

1
2
3
4
5
6
7
8
9
10
git commit -m "描述本次修改的内容" 

# 直接从⼯作区提交到版本库,略过 git add 步骤,不包含新增的⽂件
git commit -a

# 提交暂存区的指定⽂件到仓库
git commit filename

# 使用一次新的commit替代上一次的提交
git commit --amed -m "描述本次修改的内容

查看日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 包括提交的id,作者,时间和提交信息
git log

# 查看最近20条日志
git log -n20

# 让日志输出更简洁
git log -n20 --oneline

# 显示分支关系
git log -n20 --graph

# 显示某个文件的历史版本
git log --follow [file]

查看文件变更

1
2
# 查看文件修改的差异,删除的行,用-标记,新增的行,用+标记
git diff

查看当前文件的状态

1
git status

分支操作

注:分支是git中的隔离机制,主分支是程序的稳定版本,其他分支是新功能的开发其他分支的操作不会影响主分支的内容,除非合并

创建分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建分支
git branch 分支名

# 查看当前仓库所有分支
git branch

# 切换分支
git checkout 分支名

# 从当前分支创建并切换到新分支
git checkout -b 新分支名

# 从本地分支代码创建一个新分支,并切换到新分支
git checkout -b[新分支名][本地已有的分支]

分支合并

1
2
3
# 在主分支上运行
# 如果出现合并冲突,在主分支中手动找到该文件,并手动对其进行修改即可
git merge 分支名

删除分支

1
2
3
4
5
# 未合并会阻止删除
git branch -d分支名

# 强制删除
git branch -D分支名

标签操作

创建标签

1
2
3
4
5
6
7
8
9
# 指向当前最新的commit
git tag <标签名>

gittag -a <标签名> -m “标签说明”
# -a,表示创建带注释的标签
# -m,填写具体的标签描述

# 给过去指定的提交打标签
git tag a <标签名><commit的id> -m “标签说明”

查看标签

1
2
3
git tag

git show<标签名>

推送标签到远程仓库

1
2
3
4
5
# 推送单个
git push origin <标签名>

# 推送全部尚未推送的标签
git push origin --tags

删除标签

1
2
3
4
5
# 本地
git tag -d<标签名>

# 远程
git push origin —-delete <*7#7>

撤销和恢复

撤销工作区

1
2
# 恢复为最后一次提交的状态
git checkout

撤销暂存区

1
git reset

退回提交

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 软模式,仅撤销提交,代码保留在暂存区,工作区保留修改
git reset --soft

# 默认模式,撤销提交及暂存,工作区保留修改,清空暂存区
git reset --mixed

# 撤销提交及所有修改
git reset --hard

# 退回方式
# HEAD退回
git reset --soft HEAD~1
# HEAD为最新提交
# HEAD~1,表示往前移动一个提交位置

# 标签退回
git reset --soft v1.0.1
# commit id 退回
git reset --soft clc643

# 生成一个新的提交,来撤销之前的修改
git revert
# 对于已推送远程仓库的提交,更安全,更推荐

远程仓库操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 克隆远程仓库
git clone

# 本地仓库关联远程仓库
git remote add origin <远程仓库URL>

# 查看是否关联成功
git remote -v

#推送本地仓库内容到远程仓库
git push <远程仓库名> <本地分支名>:<远程分支名>
# origin表示默认仓库

# 拉取远程仓库
git pull<远程仓库名><远程分支名>

分支流

主分支(master/main)

只包含发布到生产环境的正式版本,不能直接push代码,只能请求合并,且只接受hotfix、release分支的代码合并,长期存在

热修复分支(hotfix)

从主分支派生,快速修复线上紧急问题,修复后合并并返回主分支和开发分

发布分支(release)

从开发分支派生,准备发布的临时分支,用于测试和Bug的修复

开发分支(develop)

用于日常开发,集成新功能,始终保持最新开发状态,长期存在

功能分支(feature)

从开发分支派生,开发具体新功能