前言:Git 与 Gitee 的区别
Git 是一个强大的分布式版本控制系统,用于管理源代码。市面上有很多基于 Git 的仓库网站,例如:GitHub、Gitee、GitCode 等,它们之间的关系就好像是:Git 为基类,剩余为子类的样子。使用的网站是哪一个都无所谓,Git 命令是公用的,我们主要还是学习 Git,而不是专注于图形化的某一个具体网站。
Git 版本控制系统的基础知识与操作流程。内容涵盖 Git 与 Gitee 的区别、三大区域(工作区、暂存区、本地仓库)的概念及工作流程。重点讲解了本地仓库的初始化、常用指令(status, add, commit, log, reset)以及远程仓库的 HTTPS 和 SSH 连接配置。此外,还涉及分支管理(创建、切换、合并、删除)、冲突的产生与解决方法、图形化工具推荐以及 .gitignore 文件的使用规范。文章旨在帮助开发者快速掌握 Git 核心功能,提升代码协作效率。

Git 是一个强大的分布式版本控制系统,用于管理源代码。市面上有很多基于 Git 的仓库网站,例如:GitHub、Gitee、GitCode 等,它们之间的关系就好像是:Git 为基类,剩余为子类的样子。使用的网站是哪一个都无所谓,Git 命令是公用的,我们主要还是学习 Git,而不是专注于图形化的某一个具体网站。
我们为什么要使用 Git,Git 有什么用?
版本控制:Git 帮助跟踪文件的更改,记录历史版本,以便随时回溯。
分布式:每个开发人员都有自己的本地仓库,所有版本信息都保存在本地。
快照:每次提交都是项目当前状态的快照,而非文件差异的记录。
重要的概念:
仓库(Repository):存放项目文件和版本历史的目录。
暂存区(Staging Area):保存将要提交的变更的区域,允许你选择性地提交更改。
HEAD:指向当前分支的最新提交,常用于查看或引用当前状态。
标签(Tag):为特定的提交创建一个快照标记,通常用于版本发布。
Git 的操作通常涉及三个主要区域,它们分别是:工作区(Working Directory)、暂存区(Staging Area / Index)和本地仓库(Local Repository)。
git add [file] 可以将文件从工作区添加到暂存区。git reset [file] 可以将文件从暂存区移回到工作区(撤销暂存)。.git 目录。git commit -m "message" 命令将暂存区的更改保存为一个新的提交。在这一操作之后,它们在本地仓库中创建一个新的版本。git log 查看本地仓库中的提交记录。以下是 Git 中工作区、暂存区和本地仓库的典型工作流程:
git add [file] 命令将想要提交的更改添加到暂存区。git commit -m "message" 将暂存区的更改提交到本地仓库,同时创建一个新的提交记录。整个路径尽量不要有中文
a. 创建空目录:mkdir shop
此时文件夹就是普通的文件夹
b. 进入到空目录中:cd shop
c. 初始化仓库:git init
让 Git 知道,它需要来管理这个仓库

这时候,新建的目录就关联上仓库了。再看文件就变成了这个样子:只不过这是本地仓库,不是远程的。

d. 新建文件:touch test.txt

git status

git add 文件名
git add 文件名 1 文件名 2 文件名 3 ...
git add . #添加当前目录到缓存区


(这里刚刚忘截图了,add 后的状态就是一个蓝色的加号)
git commit -m "注释内容"


(提交到版本库后,状态就变成了一个绿底色的对勾)

如果没有提交,文件夹就会给出警告标识。当我再次将提交,更改版本,那么文件夹将会改变状态,绿色的状态。

版本回退分为两个步骤操作:
① 查看版本,确定要回到的时刻点
git log
git log --oneline

从下往上看。最下面是最根节点版本信息。内容包括:
版本号(commit ****..
提交人(Author)
日期(Date)
日志内容(-m '此处的内容')

在这里我们可以看到一个版本占一行,此时日志信息只包括:版本号 + 日志内容
② 回退操作,(回到历史某一时刻)
git reset --hard 版本号
③ 重返新版,(回退操作可逆嘛?是的,可逆)
第一步:查看历史操作号,这里不止新版本有编号,回退操作本身也有编号。而 git log 只显示当前版本之前的版本号,还不包括操作编号
git reflog

然后第二步再使用 git reset --hard 版本号指令回到某一个历史节点。
上述所说的,不管是版本号还是操作编号都是 "commit id"。
Https 地址:示例仓库地址
a. 创建目录并进入(建议目录名与仓库名一致):

b. 使用 clone 指令将仓库克隆到本地:
git clone https://gitee.com/example/repo.git #线上仓库地址

此时在目录内有一个克隆下来的仓库。
c. 在仓库上做对应的操作,这个克隆仓库就是我们的工作区。我们的操作主要包括:提交暂存区(git add),提交本地仓库(git commit),提交线上仓库(git push),拉取线上仓库(git pull)。
(1)创建了一个 readme.txt 文档,并编辑内容:

(2)提交到暂存区:
git add 文件名

提交后显示的内容意思是:
此时已经将新的操作过的仓库存到了暂存区,还没有提交。
相比上个版本的仓库,更改内容为:new file 多了一个文件:readme.txt
(3)提交到本地仓库
git commit -m "日志注释内容"

(4)提交到线上仓库
git push [...]


push 之后,远端仓库就更新为你的本地版本库的状态,暂存区的没有被 commit 的内容被忽略。
(5)拉取线上仓库
git pull [...]
使用方法与 push 类似,一个是从本地推向线上,一个是从线上拉向本地。
pull 的目的是将你在远端的操作更新到本地。例如:在远端删除了一个文件,本地由于比 git 远端仓库的效率低,有状态延迟。需要我们 pull 一下,拉取线上仓库的状态。

注意:
每天打开电脑,首先 git pull 拉取线上仓库的最新版本。每天关闭电脑前,首先要 git push 将本地代码提交到线上仓库
该方式与前面的方式相比,知识影响 gitee 对于用户的身份鉴权方式,对于 git 的具体操作(具体的指令)没有任何影响。
步骤:
ssh-keygen -t rsa -C "注册邮箱" #邮箱填自己注册 gitee 时的邮箱
生成的公钥在 ~/.ssh 文件中的 id_rsa.pub 中,id_rsa 是私钥,不能给别人看。生成之前先看看自己有没有,没有的话再执行指令。

首先,使用编辑器,查看 id_rsa.pub 文件打开,例如:vi id_rsa.pub

然后,将这段内容进行复制,然后进入 gitee 网站:点击右上角的头像,进入设置界面:选择 SSH 公钥选项

最后,将公钥复制到指定位置。自己随便起个标题(就相当于备注吧,让你认识是自己的公钥,添加的公钥可以删除)

git clone [email protected]:example/repo.git #SSH 协议的 gitee 仓库地址


为什么我们的版本都可以回退和逆回退呢?这是因为我们每次提交都会有一个记录,Git 把他们串成时间线,形成类似于时间轴的东西,这个时间轴就是一个分支,我们称之为 master 分支。
在开发的时候往往是团队协作,多人进行开发,因此光有一个分支是无法满足多人同时开发的需求的,并且在分支上工作并不影响其它分支的正常使用,会更加安全,Git 鼓励开发者使用分支去完成一些开发任务。
git branch #查看分支
git branch 分支名 #创建分支
git checkout 分支名 #切换分支
git checkout -b 分支名 #创建分支同时切换到该分支
git branch -d 分支名 #delete 删除分支
git merge 被合并的分支名 #合并分支
git branch

当前分支的前面有 *,且颜色被标记为特殊颜色 (例如:绿色)
git branch 分支名

git checkout 分支名

注解:创建分支并切换 git checkout -b 分支名
git checkout -b 分支名

git branch -d 分支名

一定要先退出要删除的分支,不然就会产生错误信息:

我们看到我们身处 bugFix 分支中,然后试图删除 bugFix 分支,这时会报错:error:......
git merge 被合并分支名
在线上(浏览器中)将仓库内的任意一个内容进行编辑修改:例如将 readme.txt 的文本信息进行修改:

此时查看本地仓库内的文件:

此时:本地仓库内容与远程仓库内容的不一致即为冲突。我们如果想进行 git push,就会出现问题。

hint(提示):在 push 之前进行 pull,拉取线上仓库的内容。
解决冲突的方式:合并内容,然后与同事商量保留哪些内容。
解决冲突:在合并分支时可能会出现冲突,需要手动解决并再次提交。
撤销更改:撤销暂存区更改:
git reset [file]撤销未提交的更改:git checkout -- [file]


我们可以从中找到很多我们用到过的指令,此时我们就可以根据图形化指示进行操作。
在项目目录下有很多万年不变的文件目录,例如:css,js,images 等,或者还有一些目录即使发生变动,我们也不想让其提交到远程仓库的文档。此时我们可以使用'忽略文件'机制来实现需求。
忽略文件需要新建一个名为:.gitignore 的文件,该文件用于声明忽略文件或不忽略文件的规则,规则对当前目录及其子目录均生效。
注意:该文件因为没有文件名,没办法直接在 windows 目录下直接创建,可以通过命令行 Git Bash 来 touch 创建
| 规则 | 说明 |
|---|---|
| /mtk/ | 过滤整个文件夹 |
| *.zip | 过滤所有压缩文件 |
| /mtk/do.c | 过滤某个具体文件 |
| lindex.php | 不过滤某个具体文件 |
# Build and Release Folders
bin-debug/
bin-release/
[Oo]bj/
[Bb]in/
# Other files and folders
.settings/
# Executables
*.swf
*.air
*.ipa
*.apk
#过滤掉不想要文件和文件夹
*.exe
*.sln
*.vcxproj
*.filters
*.user
*.suo
*.db
*.ipch
Debug/
.vs
Release/
# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
# should NOT be excluded as they contain compiler settings and other important
# information for Eclipse / Flash Builder.
git init:初始化一个新的 Git 仓库。git clone [url]:从指定 URL 克隆一个远程仓库。git status:查看工作区和暂存区的状态,显示哪些文件已修改、哪些已暂存等。git add [file]:将文件添加到暂存区。git commit -m "commit message":将暂存区的更改提交到本地仓库,并附上提交信息。git log:查看提交历史,显示每次提交的信息(SHA 值、作者、日期等)。git diff:查看尚未暂存的文件与最近一次提交之间的差异。git branch:列出所有分支,当前分支会有星号标记。git branch [branch-name]:创建一个新分支。git checkout [branch-name]:切换到指定的分支。git merge [branch-name]:将指定分支合并到当前分支。git remote -v:查看当前配置的远程仓库。git push [remote] [branch]:将本地分支的更改推送到指定的远程仓库。git pull [remote] [branch]:从远程仓库拉取并合并最新的更改。git clone [url]git checkout -b [new-branch]git add [file]git commit -m "description"git checkout maingit merge [new-branch]git push origin main
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online