学习笔记:Git的入门到熟练使用

本博客以Windows版本Git为例,介绍了Git的基本概念、使用步骤。包括分布式版本控制特点、与SVN区别,还阐述了必要配置、工作原理、项目搭建、文件操作、分支管理、远程仓库访问及多人协作等内容,同时给出安装、配置及解决问题的方法。

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


前言

Git的官网:https://git-scm.com/

GitForWindows清华源下载:https://mirrors.tuna.tsinghua.edu.cn/github-release/git-for-windows/git/

Git的安装:在Windows平台,下载好Git后直接无脑下一步安装;在Linux系统通过yum install git安装。

Gitee官网:https://gitee.com/
Gitee官网提供的“Gitee大全”:https://gitee.com/all-about-git

说明:本博客是以Windows版本Git做基本操作,在Linux系统下的操作基本无差异。本文的受众人群:有Linux基础或是其他编程能力的人。


一、Git是什么?

1. 分布式版本控制Git

所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

不会因为服务器损坏或者网络问题,造成不能工作的情况!

2. Git和SVN的主要区别?

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。

Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!

3. Git的Windows版本

主要有三个版本:

Bash版本:linux操作风格,推荐
CMD版本:Windows的命令号操作风格,抛弃
GUI版本:图形界面操作,抛弃

在这里插入图片描述

二、Git使用步骤

1. Git的必要配置

1.1 查看配置:

查看Git的全部配置信息:

git config -l
git config --list

在这里插入图片描述

查看系统config:

git config --system --list

在这里插入图片描述

查看当前用户(global)配置:

git config --global --list

默认没有当前用户的配置文件,可以通过指令直接配置并自动新建.gitconfig文件
在这里插入图片描述

1.2 Git相关的配置文件:

所有的配置文件都保存在本地。

(1)Git\etc\gitconfig #Git 安装目录下的 gitconfig --system 系统级
(2)C:\Users\Administrator\ .gitconfig #只适用于当前登录用户的配置 --global 全局 --Linux路径在当前用户根目录下
(3)./.git/config #当前仓库的配置信息

首次安装Git后首先要做的事情是设置用户名和e-mail地址。 这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:

git config --global user.name “name” #名称
git config --global user.email “email” #邮箱

只需要做一次这个设置,如果你传递了–global 选项,因为Git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要–global选项。总之–global为全局配置,不加为某个项目的特定配置。
在这里插入图片描述

2. Git的工作原理

2.1 三个区域

Git本地有三个工作区域:

工作区(Working Directory)
暂存区 (Stage/Index)
Git仓库 (Repository或Git Directory)。

如果在加上远程的Git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
在这里插入图片描述

(1)Workspace:工作区,就是你平时存放项目代码的地方
(2)Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
(3)Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
(4)Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

本地的三个区域确切的说应该是git仓库中HEAD指向的版本:
在这里插入图片描述

(1)Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。
(2)WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。
(3).git:存放Git管理信息的目录,初始化仓库的时候自动创建。
(4)Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。
(5)Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。
(6)Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。

2.2 工作流程和三种Git管理文件的状态

Git的工作流程一般是这样的:

(1)在工作目录中添加、修改文件;
(2)将需要进行版本管理的文件放入暂存区域;
(3)将暂存区域的文件提交到git仓库。

因此,Git管理的文件有三种状态:

(1)已修改(modified):修改了工作区的文件,但是没有放到暂存区。
(2)已暂存(staged):通过git add 指令把已修改的文件做标记。
(3)已提交(committed):通过git commit指令,把暂存区的文件正式保存到Git仓库。

在这里插入图片描述

3. Git项目搭建

3.1 工作目录与常用指令

工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你现有项目的目录,也可以是一个新建空目录。

日常使用只要记住下图6个命令:
在这里插入图片描述

3.2 建立Git仓库的两种方式

3.2.1 本地仓库的建立

在需要Git管理的项目根目录执行:

git init

执行指令后,根目录会生成一个.git目录,关于版本等的所有信息都在这个目录里面。

3.2.2 克隆远程仓库

复制gitee或者github仓库地址:
在这里插入图片描述
通过下面指令完成克隆:

git clone [url] #[url]是仓库的地址

注意:
推荐使用SSH克隆,使用https克隆,在后面配置SSH公钥后仍然需要验证账号密码,后文(6.1.3 配置SSH无效问题)有说明以及解决办法。

4. Git文件操作

4.1 Git仓库文件的四种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

(1)Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
(2)Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
(3)Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
(4)Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

4.2 查看文件状态和修改文件状态

git status [filename] #查看指定文件[filename]状态
git status #查看所有文件状态
git status -s #精简的方式显示文件状态

git diff #查看difference,在add之前,查看文件修改的内容

git add [filename] #添加文件[filename]到暂存区
git add . #会把本地所有Untracked的文件都加入暂存区,并且会根据.gitignore做过滤
git add * #会略过.gitignore文件,并把任何文件都加入

git commit -m “消息内容” #提交暂存区中的内容到本地仓库 -m 提交信息
git log #查看当前版本从最近到最远的提交日志(历史版本信息)
git log --pretty=oneline #以单行的形式显示提交日志

git reflog #查看所有的版本信息

git reset --hard 版本号 #切换版本, HEAD为当前版本,HEAD^为上个版本

git checkout – [filename] #撤销修改(命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令):文件add之前,即丢弃工作区的修改,回到和版本库一模一样
git restore [filename] #撤销修改,和git checkout – [filename] 功能一样

git reset HEAD [filename] #取消暂存,文件add之后,把暂存区的修改撤销掉(unstage),重新放回工作区
git restore --staged [filename] #取消暂存,和git reset HEAD [filename]功能一样

git rm [filename] #删除文件,删除后件记录在暂存区,然后git commit提交;如果不想删除了,使用git reset HEAD [filename] 即可

4.3 忽略文件.gitignore

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等。
在主目录下建立".gitignore"文件,此文件有如下规则:

test.txt #忽略单个文件
.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt #但lib.txt除外
/temp #仅忽略当前目录下的temp文件,不包括其它目录的temp
build/ #忽略所有目录下名字为build的文件夹
doc/
.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

5. Git分支管理

分支类似科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,我们就需要处理一些问题了!
主分支是基于提交而产生的,功能分支是基于主分支的创建而产生的。

5.1 Git分支常用指令

git checkout -b [branch-name] #新建一个分支,并切换至新分支
git switch -c [branch-name] #新版本指令,同上
git checkout [branch-name] #切换到指定分支,并更新工作区
git switch [branch-name] #新版本指令,同上

git branch [branch-name] #新建一个分支,但依然停留在当前分支
git branch #列出所有本地分支
git branch -r #列出所有远程分支

git merge [branch-name] #合并指定分支到当前分支,分支代码提交之后,才能切换;合并代码是站在主分支上合并功能分支。
git log --graph #命令可以看到分支合并图
git log --graph --pretty=oneline --abbrev-commit # 美化输出
–graph commit之间将展示连线
–decorate 显示commit里面的分支
–pretty=oneline 只显示commit信息的标题
–abbrev-commit 只显示commit SHA1的前7位

git branch -d [branch-name] #删除分支
git push origin --delete [branch-name] #删除远程分支
git branch -dr [remote/branch] #

5.2 解决合并冲突

如果同一个文件,在master和其它分支上同时修改了内容,在主分支上进行合并操作的时候就会提示冲突。

解决:
遇到冲突的文件,必须手动解决冲突后再提交,git status也可以告诉我们冲突的文件,Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,手动修改为有效文件,再进行add和commit操作即可

6. 远程仓库:推荐使用码云(Gitee)

Gitee的注册登录还有创建仓库,过于简单,不便演示。

6.1 远程仓库的两种访问方式

6.1.1 HTTPS: 无需配置,但是每次访问仓库时,需要重复验证账号远程仓库密码。

在本地的Git仓库目录添加远程仓库地址,要确保本地仓库文件已经commit:

git remote add origin [https仓库地址] #添加远程仓库地址,–origin是变量名,保存的是你输入的地址
git remote -v #查看变量中储存的地址
git push -u origin “master” #把master分支,推送到origin保存的地址
git push #上一句在第一次执行完后,-u就记录了master,以后都可以执行此句向远程仓库提交master
git push origin “其他分支” #把其他分支,推送到origin保存的地址

如果是克隆的仓库,不需要添加origin,origin会被自动配置为你克隆的仓库地址,直接正常操作(push、pull)即可。

6.1.2 SSH:需要简单配置,配置成功后不需要重复验证账号远程仓库密码

设置SSH公钥,来实现免密登录:Gitee官方教程公钥管理
前两个顺序观看,后面的选择观看。
在这里插入图片描述

6.1.3 配置SSH无效问题

本人刚开始遇到的问题:
在linux系统配置好SSH以后push、pull操作还需要验证账号密码。
问题的原因是:
用https方式克隆了仓库,上面说过的origin变量会被自动配置为https地址。如果一开始使用ssh方式克隆就不会有此问题。Windows即使https克隆仓库,也不会验证密码,是因为Windows自动把账号密码保存了,可以在控制面板->用户账户->管理你的凭据->Windows凭据->普通凭据里查看你保存的账号密码。
问题的解决:
把https的地址改为ssh的地址,在当前仓库的.git/config文件中,找到url = https地址并修改为你的仓库的SSH地址
在这里插入图片描述
在这里插入图片描述

7. Git的多人协作

在这里插入图片描述


总结

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值