本篇文档旨在帮助大家快速入门git,用最快的速度帮助新手小白理解git的工作流程,可以快速上手使用git进行项目管理以及版本控制,帮助大家更好的利用git完成自己的项目以及快速的上手工作 !
介绍
Git 是一个分布式版本控制系统,用于跟踪文件变更并协调多人协作开发。其核心功能包括记录文件修改历史、支持分支管理以及实现代码合并。
Git 的核心特点
- 分布式:每个开发者拥有完整的代码仓库副本,无需依赖中央服务器即可工作。
- 高效:采用快照机制存储变更,而非差异比较,大幅提升性能。
- 分支管理:支持轻量级分支创建与合并,便于并行开发。
与github的关系
GitHub是一个基于Git的代码托管平台,提供云端仓库存储、协作工具(如Pull Request、Issue)、项目管理功能。GitHub依赖Git进行版本控制,但扩展了协作和社交化编程的能力。
git的下载与初始化
下载与配置
以windows系统为例,从 Git 官方网站 下载 Windows 版安装程序。选择适合的版本(32 位或 64 位),运行安装程序并按照提示完成安装。
打开终端输入git --version 可以查看git的版本 如下图

在下载完成后需要进行初始化配置
bash
git config --gloabl user.name "YourUserName"
git config --gloabl user.email "YourUseremail"
这两行命令只用配置一次,配置成功后可以使用下面的命令查看当前全局配置
bash
git config --global --list
管理仓库
我们管理代码的时候需要一个代码仓库用来管理代码,有了这个仓库git就可以追踪代码的增加,删除,变更等操作,以便可以完成版本管理,创建代码仓库主要有两个方法
bash
git init
git init是 Git 版本控制系统的初始化命令,用于在当前目录创建一个新的 Git 仓库。执行后会在目录中生成一个隐藏的 .git 文件夹,包含所有必要的仓库元数据。
bash
git clone 仓库的地址
git clone是 Git 版本控制系统中用于将远程仓库复制到本地的命令。通过该命令,用户可以获取远程仓库的完整副本,包括所有分支、提交历史和文件
git的工作区域
Git 的工作区域主要分为四个部分:工作目录(Working Directory)、暂存区(Staging Area)、本地仓库(Local Repository)和远程仓库(Remote Repository)。每个区域在版本控制过程中扮演不同的角色。
工作目录
工作目录是用户直接编辑文件的区域,也称为工作区。所有对文件的修改、新增或删除操作都在这里完成。工作目录中的文件状态可能是已修改(modified)、未跟踪(untracked)或已删除(deleted)。
工作目录中的文件需要通过 git add 命令添加到暂存区,才能被 Git 跟踪。
暂存区
暂存区是一个中间区域,用于临时存放即将提交到本地仓库的更改。通过 git add 命令可以将工作目录中的更改添加到暂存区。暂存区的存在允许用户选择性提交部分更改,而不是一次性提交所有修改。
使用 git status 可以查看暂存区和工作目录的状态。
本地仓库
本地仓库是 Git 存储项目完整历史记录的地方,位于 .git 目录中。通过 git commit 命令可以将暂存区的更改提交到本地仓库。每次提交都会生成一个唯一的哈希值(commit ID),用于标识该次提交。
本地仓库中的提交可以通过 git log 查看历史记录。
远程仓库
远程仓库是托管在服务器上的 Git 仓库,用于多人协作或备份代码。常见的远程仓库托管平台包括 GitHub、GitLab 和 Bitbucket。通过 git push 命令可以将本地仓库的更改推送到远程仓库,而 git pull 或 git fetch 可以从远程仓库拉取更新。
工作流程是当你在本地代码修改完后需要把代码提交到暂存区中(git add),再从暂存区提交到本地仓库中(git commit)
git的文件状态
而同样的文件的状态也可以分为四个状态分别是未跟踪,未修改,已修改,已暂存
未跟踪
- 文件存在于工作目录中,但尚未被 Git 管理。
- 此类文件不会出现在 Git 的版本历史中,也不会被提交到仓库。
- 使用
git add <file>命令可将文件从"未跟踪"状态转为"已暂存"。
未修改
- 文件已被 Git 跟踪,且自上次提交以来未被修改。
- 文件内容与当前版本库中的最新版本完全一致。
- 若修改此类文件,状态将变为"已修改"。
已修改
- 文件已被 Git 跟踪,且自上次提交后内容发生了更改。
- 修改后的文件尚未被暂存,需通过
git add命令将其标记为"已暂存"。 - 可通过
git checkout -- <file>放弃本地修改,恢复到"未修改"状态。
已暂存
- 文件已被修改并通过
git add命令暂存,准备纳入下一次提交。 - 暂存区的文件会出现在
git status的"Changes to be committed"部分。 - 使用
git commit提交后,文件状态将重置为"未修改"。
状态转换示例
- 未跟踪 → 已暂存:
git add <file> - 未修改 → 已修改:编辑文件内容
- 已修改 → 已暂存:
git add <file> - 已暂存 → 未修改:
git commit
git的工作演示
提交
首先我们创建一个gitTest文件夹,在当前文件夹的路径下将他变更成一个git管理的文件夹

可以再当前文件夹下看见一个被隐藏起来的.git文件说明该文件夹已经被git监视了

接下来新建一个文本文件test1.txt文件,我们可以利用git status查看当前的状态
bash
git status
这个命令可以用于显示工作目录和暂存区的状态,包括已修改、已暂存或未跟踪的文件。
输入命令后应该会出现如下的现象

可以看到我们刚刚创建的这个文件就是一个没有被跟踪的文件接下来就可以使用git add命令将他放到暂存区里面

现在这个时候就看可以使用git commit把我们暂存区的东西提交到我们的仓库中去了

注意这里的-m 后面跟的是提交信息
这样就可以把我们暂存区的东西提交到仓库中,从而让代码真正的被保管起来
这时就可以使用git log来查看一下我们的提交记录

回退
命令
bash
git reset
这个命令拥有三种常见模式,分别是
bash
git reset --soft
soft : 表示回退到git的某一个版本并且保持工作区和暂存区的所有内容
bash
git reset --hard
hard:表示回退到git的某一个版本并且抛弃掉工作区和暂存区的所有内容
bash
git reset --mixed
mixed:表示回退到git的某一个版本并且保持工作区的所有内容,抛弃暂存区的所有内容
演示一下首先我们创建并提交三个文件

我们可以使用git log --oneline来查看我们的提交版本号,通过这个版本号回到我们希望回到的版本


可以看到我们回到了提交第二个版本处,又因为我们使用的是soft 所以我们的工作区和暂存区都没有被抛弃
可以,看一下git reset --hard

可以看到我们的test3 以及直接被抛弃了,不管是工作区还是暂存区都没有了,可以理解为让版本直接回退到这个版本而不保留任何更改
而通过git mixed 我们可以看到

我们回到了test3.txt被加入到暂存区之前的状态!
通过上面的例子我们发现git hard会抛弃掉我们的工作区和暂存区的所有文件,因此我们应该谨慎使用这个参数,当然如果误操作了也没有关系,我们可以使用git reflog命令查看之前操作的版本 接着在使用git reset 命令回到对应版本就好了

查看差异
bash
git diff
用于比较工作目录、暂存区和版本库之间的文件差异,在大部分的公司开发中我们会使用到更为直观的图形化页面,但是了解了这个命令可以帮助我们更好的理解这些图形化工具的工作流程,从而让我们可以更加得心应手的使用
首先,git diff 如果不加任何参数默认比较工作区和暂存区之间的内容,如图我们将test3.txt文件中的hello world 更改为 hello world !

因为这里我们在工作区进行了修改,我们使用git add 加入到暂存区在输入 git diff 就不会输入了
当然, 我们可以通过 git diff HEAD 对比工作区与版本库之间的差异

我们也可以通过git diff --cached 这个命令来比较暂存区与版本库之间的差异

我们也可以在git diff 后面加上两个版本号用以比较两个不同版本之间的差异

而我们在工作中最常用的一般是跟上一个版本进行比较git 给我们提供了这样的快捷方式即在HEAD后加波浪号表示上一个版本
git diff HEAD HEAD~

而在波浪号后面加上数字就表示提前了几个版本
gitignore文件
该文件用于指定 Git 版本控制系统中应忽略的文件或目录。这些文件通常包括临时文件、日志、编译生成的文件等,避免它们被提交到仓库中。
如图所示我们在gitignore中加入了access.log文件所以我们的git status 中就看不到我们的access.log文件了


值得注意的是 我们的.gitignore文件忽略的是没有被添加到版本库中的文件,也就说明我们应该提前将这个文件配置好
当然gitignore也有自己的匹配规则感兴趣的读者可以到官方网站阅读Git - gitignore Documentation这里就不作赘述
远程仓库
这里我们以我们的github仓库为例,进入github官网github.com完成注册个人账号,如果出现了打不开页面的情况可能是需要挂上加速器,大家也可以在网站上结合自己的问题搜索对应的答案!
注: 如果大家出现看不懂英文的情况可以在github上面下载中文插件!
进入个人页面我们创建完仓库会出现如下页面

现在就可以克隆我们的远端仓库了

这里推荐使用SSH来克隆我们的仓库如果您还没有配置ssh密钥,可以在C盘的用户目录下找到.ssh文件(如果没有可以自己创建一个),在该文件的路径下的终端中输入该命令
bash
ssh-keygen -t rsa -b 4096
会生成两个文件,我们将.pub文件打开并复制到我们git的设置SSH中去就可以使用我们的SSH方式复制了!
克隆下来的仓库我们可以看见就在我们当前的目录下

现在我们添加一个文件


又因为我们只是在本地仓库上进行修改,并不会影响到我们的远程仓库,所以我们需要两个新的命令让我们可以跟远程仓库进行同步
他们分别是 push (推送到远程仓库)和 pull (从远程仓库中拉取代码)

可以看到我们的代码已经被推送到github上去了
当然我们现在创建了一个远程仓库然后从上面clone代码,当我们本地有一个仓库自然也是可以去关联我我们的远程仓库的

就是我们的下面这段命令,感兴趣的同学可以自己实验一下,因为在工作中大部分的第一课就是将自己的仓库与公司的远程仓库关联起来!
通过pull可以从远端拉取文件


可以看到本地多了一个README文件
我们也可以实验git fetch命令 这个命令可以让我们获得远程仓库的修改让我们最后自己进行手动合并,注意:这个命令一般在工作中用到的比较多
分支
Git的分支是指向提交对象的可变指针,允许在不影响主分支(如 main 或 master)的情况下进行并行开发。每个分支代表一条独立的开发线,分支的创建、切换和合并是 Git 的核心功能之一。
要查看本地所有分支及当前所在分支,使用这个命令:
git branch
切换到已存在的分支:
git checkout
将目标分支合并到当前分支:
git merge <branch-name>
如果合并时出现冲突,需手动解决冲突后提交:
- 编辑冲突文件(Git 会标记冲突内容)。
- 使用
git add标记冲突已解决。 - 提交合并结果:
我们也可以通过变基(rebase)
变基可以将当前分支的提交"移植"到目标分支的最新提交上,使历史更线性:
也就是说rebase 命令 会找到main 分支 和 branch 共同的祖先 , 然后找到再把当前分支的从祖先节点到最新的提交节点的记录变更到目标节点中去