目录
在做web开发时,我们总会遇到两个棘手的问题:
1.代码写错了,文件错删了,怎么回到上次还可以运行的状态?即撤销修改。
2.项目庞大之后,如何分工协作,共同开发而不会产生冲突?
...
这个时候Git这个版本管理工具就替程序员解决了这个烦恼。
我们常常听到GitHub、Gitee等一些网站,这其实是一个代码托管平台。不同的是,GitHub是面向全球的开发者,Gitee则是国产的代码托管平台。
一、Git、GitHub、Gitee三者的关系
Git是一个分布式版本管理控制系统,是一个安装在电脑的软件(命令行工具),它在本地实现了版本控制,如提交,回退,合并等工作。
GitHub和Gitee则是基于Git技术搭建的代码托管网站,它建立了一个远程仓库,它允许你把本地仓库同步到远程仓库上去。这样即使,本地丢失。还可以在远程仓库中找到,这样做就允许别人也能从远程仓库中同步到自己的本地来。避免了手动发送代码压缩包的问题,非常方便。
那么我们本节就从安装Git开始,在本地建立仓库,然后同步到Gitee上去。
二、本地安装Git
进入Git官网,根据自己的操作系统点击安装。
下载连接:Git下载与安装

选择稳定的版本,Git for Windows/x64 Setup ,这是标准的exe安装程序,图形化引导界面。

安装完成之后,可以看到:

双击运行git-bash.exe,输入如下指令
bash
git --version

看到版本信息后,表示安装成功。
紧接着配置如下信息:
bash
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"
这里的名字和邮箱,可以不是真实的,但必须要有,作为用户身份标识。
三、建立本地仓库
假如我们还没有项目,那么就找一个希望创建项目的目录,并在此目录下选择

执行命令:
bash
git init
如果我们有了项目,那么就在该项目的根目录处执行上述操作。

这样就会生成一个.git文件夹,里面存放了我们的管理信息。
现在我们使用另一个指令,查看当前仓库的提交状况。
bash
git status

我们发现,nano-nap/这个文件夹显示未被追踪,如果未被追踪那么就感知不到里面的修改,将来无法回退指定位置。
这并不是我们想要的,所以我们把它添加到暂存区。使用如下指令:
bash
git add .
这里的.就代表了所有文件。

这里提示我们文件换行符的风格问题,忽略。
现在我们status一下:

所有的新文件都被追踪了。
**git add**的唯一职责是"把当前工作目录的修改(新文件或已修改文件)放入暂存区"。对于新文件,它会顺便建立追踪;对于已追踪文件,它只更新暂存区中的快照。
除此之外,git add还可以指定文件,如git add 文件1 文件2 文件3
但需要注意的是,如果当前进入的是项目根目录,那么你就需要把从根目录开始写出文件的相对路径,不需要绝对路径。
我们把文件放入暂存区后,需要提交并记录下来。
bash
git commit -m "此次提交说明,改动了哪些文件,主要哪些功能"

这样我们就完成提交了,d5261ec是我们这次提交的短哈希值,是这次提交的唯一标识符,未来凭借此串字符串回到这个状态。
100644表示这是一个普通文件,组内所有人都可以读写。
四、本地仓库和远程仓库关联
现在我们本地已经建立好了仓库,我们想在gitee上建立远程仓库,同步到远程仓库,方便队友拉取代码。
来到gitee,点击创建仓库。


设置好关键信息后,直接创建即可。注意我们不要选择初始化仓库,我们本地已经有仓库了,这里初始化会生成README 文件,造成冲突。

复制这串仓库地址,在我们的项目目录下执行:
bash
git remote add origin 仓库地址
origin是远程仓库的别名,未来就可以使用origin来作为远程仓库推送
使用如下指令查看是否关联成功
bash
git remote -v

有如下显示就代表成功了。

当前分支是main分支,那么使用如下指令推送到远程仓库
bash
git push -u origin main
第一次使用这个指令,-u参数表示记住此次本地分支和远程仓库分支的对应关系:我们的本地main->远程main分支。


推送成功,未来就可以直接使用git push 来完成推送了,更加简洁。
我们看看远程仓库的情况。

远程已经同步了,这里的提交时间取的是本地提交的时间,不是我们推送的时间。
五、常见的git指令
1.初始化与配置
bash
# 将当前文件夹初始化为一个 Git 仓库(生成隐藏的 .git 文件夹)
git init
# 配置全局用户名(第一次使用 Git 时必须设置)
git config --global user.name "你的名字"
# 配置全局邮箱(第一次使用 Git 时必须设置)
git config --global user.email "你的邮箱@xxx.com"
# 查看当前的 Git 配置信息
git config --list
2.提交与查看
bash
# 查看当前仓库的状态(哪些文件改了、新增了、删除了)
git status
# 把指定文件添加到"暂存区"(准备提交)
git add <文件名>
# 把当前目录下所有变动(新文件、修改)添加到"暂存区"(最常用)
git add .
# 把暂存区的所有内容正式提交到"本地仓库",并附上提交说明
git commit -m "这里写本次改动的说明"
# 查看提交历史(按时间顺序从新到旧列出所有 commit)
git log
# 查看精简版的提交历史(一行显示一次提交,便于快速浏览)
git log --oneline
3.分支管理
bash
# 列出所有本地分支,前面带 * 的是当前所在分支
git branch
# 创建一个新分支(例如新建名为 dev 的分支)
git branch dev
# 切换到另一个分支(例如切换到 dev 分支)
git checkout dev
# 【组合动作】新建并立即切换到一个新分支(常用)
git checkout -b <新分支名>
# 将另一个分支(比如 dev)的内容合并到当前分支
git merge dev
# 删除指定的本地分支(-d 是 delete)
git branch -d <分支名>
4.仓库远程协作
bash
# 将本地仓库与远程仓库关联(给远程仓库起别名叫 origin)
git remote add origin <远程仓库的 HTTPS 或 SSH 地址>
# 查看已关联的远程仓库地址(-v 是 verbose,显示详细地址)
git remote -v
# 【第一次推代码】将本地 main 分支推送到远程,并建立追踪关系
git push -u origin main
# 【日常推代码】推送到远程(建立追踪后,后面就不用加参数了)
git push
# 【拉取代码】从远程仓库下载最新的更改,但**不**自动合并
git fetch
# 【拉取并合并】从远程仓库下载最新更改,并自动合并到当前分支(最常用)
git pull
# 复制一份远程仓库到本地(首次下载项目用)
git clone <远程仓库的地址>
5.撤销与回滚
bash
# 撤销"工作区"的修改(让某个文件回到上一次提交的状态)
git checkout -- <文件名>
# 撤销"暂存区"的文件(把文件移出暂存区,但不删除它)
git reset HEAD <文件名>
# 重置"本地仓库"到之前的某次提交(保留修改在硬盘上)
git reset --soft <目标 commit 的哈希值>
# 强制重置(回到某次提交,删除它之后的所有新修改,**慎用!**)
git reset --hard <目标 commit 的哈希值>
六、总结
本节,主要介绍了如何git、gitee和github的关系。学会了如何创建本地仓库,以及如何在gitee上建立远程仓库,并做好同步工作。总结了一些常用的git指令。
文中如有错误,请大家指出,作者会及时勘误。