git入门和gitee学习
🌈 Git 入门学习
目录
🌈 Ⅰ Git 安装
- Linux - CentOS
- Linux - Ubuntu
🌈 Ⅱ Git:工作区、暂存区与版本库
- 概念说明
- 使用 Git 管理工作区的文件
🌈 Ⅲ Git 基本操作
- 创建本地仓库
- 配置本地仓库(局部/全局)
- 添加文件(
git add)
- 添加文件(
- 提交(
git commit)与查看差异(git status/git diff)
- 提交(
- 版本回退(
git reset)
- 版本回退(
- 撤销修改(多种情形)
- 删除文件
🌈 Ⅳ 分支管理(创建、切换、合并、冲突与删除)
🌈 Ⅴ 远程操作(创建远端仓库、克隆、推送、拉取)
🌈 Ⅵ 标签管理(创建/删除/推送/删除远端标签)
🌈 Ⅰ Git 安装
01. Linux - CentOS

在 CentOS 系统中,可以使用 yum 包管理器安装 Git:
sudo yum install -y git
02. Linux - Ubuntu
在 Ubuntu 系统中,可以使用 apt 包管理器安装 Git:
sudo apt-get install -y git
🌈 Ⅱ Git:工作区、暂存区与版本库
01. 概念说明
- 工作区(Working Directory):你在电脑文件系统中直接看到并编辑的实际目录与文件。
- 暂存区(Staging Area / Index):记录哪些文件或改动将要被提交(通常存储在
.git/index文件中)。 - 版本库(Repository / .git):Git 用来保存项目历史记录和元数据的隐藏目录,负责跟踪所有文件的修改历史。
⚠️ 注意:通常情况下,不要手动修改.git目录中的文件。

02. 使用 Git 管理工作区的文件(流程)
- 使用
git add将工作区中的文件改动放入暂存区。 - 使用
git commit将暂存区的内容提交到本地仓库(例如master或当前分支)。
只有完成以上两步操作,文件的改动才会被正式记录在版本历史中。
🌈 Ⅲ Git 基本操作
01. 创建本地仓库
mkdir myrepo
cd myrepo
git init
# 执行后使用 ls -al 可看到 .git 目录,表示仓库创建成功

02. 配置本地仓库
Git 需要配置用户名和邮箱,这些信息将用于提交记录。
2.1 局部配置(仅对当前仓库有效)
git config user.name "你的用户名"
git config user.email "你的邮箱"

# 查看当前仓库的配置
git config -l
# 删除局部配置
git config --unset user.name
git config --unset user.email


2.2 全局配置(对当前机器上所有仓库有效)
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"

# 删除全局配置(注意拼写)
git config --global --unset user.name
git config --global --unset user.email

03. 添加文件(git add)
- 添加单个或多个文件:
git add file1 file2
- 添加整个目录(包含子目录):
git add dirname
- 添加当前目录下所有改动:
git add .

04. 提交(git commit)
- 提交暂存区全部内容:
git commit -m "commit message"
- 提交指定文件:
git commit file1 file2 -m "message"
查看状态与差异
- 查看仓库当前状态(显示哪些文件被修改、未暂存或未提交):
git status

- 查看工作区与暂存区的差异:
git diff 文件名

- 查看暂存区与上一次提交(commit)的差异:
git diff --cached 文件名
05. 版本回退(git reset)
git reset 用于回退到指定的提交版本,常用参数如下:
git reset [--soft | --mixed | --hard] [HEAD]
--soft:仅回退版本库引用(HEAD),保留暂存区和工作区的改动。--mixed(默认):回退暂存区与版本库,工作区保持不变。--hard(慎用):工作区、暂存区与版本库全部回退(会丢失所有未提交的修改)。
指定版本的方法:
HEAD:当前版本HEAD^或HEAD~1:上一个版本HEAD^^或HEAD~2:上上个版本,依此类推。
06. 撤销修改(根据不同情形)
6.1 还未 git add(改动仅在工作区)
恢复到上一次 add 或 commit 的状态:
git checkout -- 文件名

6.2 已 git add 但未 commit
撤销暂存区的改动(将文件从暂存区移除,但保留工作区的改动):
git reset HEAD 文件名

6.3 已 add 并 commit
需要还原到某次历史提交,可以使用 git revert 或 git reset:
git revert <commit>:创建一个新的提交来撤销某次提交(更安全,保留历史记录)。git reset --hard <commit>:强制回退(会丢弃之后的提交与未保存的改动,请谨慎使用)。

07. 删除文件
从 Git 管理中删除文件并提交:
git rm 文件名
git commit -m "remove file"
如果只想从版本控制中移除但保留工作区中的文件,可以使用:
git rm --cached 文件名

🌈 Ⅳ Git 分支管理
01. 分支介绍
分支是 Git 中实现并行开发的轻量级手段。默认主分支通常为 master 或 main。

02. 查看分支
git branch # 列出本地分支,* 表示当前所在分支
git branch -a # 列出本地与远程所有分支

03. 创建分支
git branch new-feature

04. 切换分支
git checkout new-feature
# 或使用新语法
git switch new-feature

05. 合并分支
在目标分支上执行合并操作:
git checkout master
git merge new-feature

06. 删除分支
git branch -d branchname # 安全删除(仅当分支已合并)
git branch -D branchname # 强制删除(即使分支未合并)


07. 合并冲突(演示与解决)
如果在合并过程中发生冲突,Git 会标记出冲突的文件。手动编辑解决冲突后,执行以下命令:
# 解决冲突后,将文件标记为已解决
git add 冲突文件
git commit -m "resolve conflict"

- 先使用
git checkout -b dev1创建并切换到 dev1 分支。

- 对 dev1 分支下的 ReadMe 文件的第三行进行修改。

- 在 dev1 分支修改 ReadMe 文件的同时,master 分支也在对该文件的第三行进行修改。

- 此时 dev1 分支和 master 分支在 ReadMe 文件的第三行产生了冲突,Git 在合并这两条分支时无法确定合并后的第三行应该保留哪个分支的内容。

- 解决合并冲突

- Git 无法自动决定保留哪个分支的内容,需要手动调整冲突代码,并再次提交修改后的结果。
- 假设需要保留 dev1 分支的内容,只需在 ReadMe 文件中删除其他不相关的内容,然后提交修改后的文件即可。

08. Bug 分支(临时分支策略)
- 可以使用临时分支存放未完成的工作或进行 bug 修复。
- 使用
git stash/git stash pop可以临时保存工作区改动,以便切换分支。 - 临时分支存在风险:如果不及时合并或备份,可能会导致改动丢失。
8.1 存储工作区内容
Git 提供了 git stash 命令,用来储藏当前工作区信息,被储藏的内容可在将来某个时间恢复出来。

- 此时 dev1 的工作区就是干净的,可以放心地创建分支来修复 master 的 bug。

- 在储藏好 dev1 的工作区之后,由于要基于 master 分支来修复 bug,因此要切换到 master 分支,再新拉一条临时分支来修复 bug。

在修复完成后,切换到 master 分支并与 fix_bug 分支合并,最后再删除 fix_bug 分支。
8.2 恢复工作区内容
- 在修复完 master 的分支后,还要继续回到 dev1 分支继续进行开发

- 但此时 dev1 的工作区是干净的,原先的内容被存储到了 stash 中,需要将 stash 存储的内容恢复到 dev1 的工作区中。
1. 恢复并删除 stash 文件
- 可以使用
git stash pop命令,在恢复工作区内容的同时删除 stash 文件。

2. 恢复但不删除 stash 文件
git stash apply:恢复工作区内容,恢复后并不会删除 stash 文件。
3. 直接删除 stash 文件
git stash drop:删除 stash 文件,git stash pop可以看作是git stash apply和git stash drop的结合。
8.3 Bug 分支存在的风险
修复 bug 的内容并没有在 dev1 上显示,因为 master 分支是目前最新的提交,要领先于新建 dev1 时基于 master 分支的提交,所以在 dev1 中无法看见修复 bug 的相关代码。

由于我们的最终目的是要让 master 合并 dev1 分支,但又因为合并时可能产生合并冲突。一旦产生合并冲突就需要人工去修改,进行人工操作就可能在 master 分支改出 bug。
解决 bug 分支产生的合并冲突问题
- 先将 master 分支合并到 dev1 分支,合并之后即使有合并冲突问题也可以在 dev1 分支进行修改测试,不会影响到 master 分支的内容。
- 再将 dev1 分支合并到 master 分支,因为已经在 dev1 下解决了合并冲突问题,此次合并就无需再解决合并冲突了。
09. 删除临时分支
在实际开发的过程中,为了避免弄乱主分支,每添加一个新功能时,最好新建一个分支。将新建的分支称为 feature 分支,在上面实现新功能的开发、合并,最后删除。
但如果在某个 feature 分支上开发到一半,项目被叫停,这个 feature 分支还必须就地销毁,又因为该分支内容没有合并到 master 分支下,因此无法使用 git branch -d 指令删除该分支。
动图演示删除分支失败的情况

使用 git branch -D 分支名 删除临时分支
- 已提交但未合并到 master 的分支只能在其他分支使用
-D选项强制删除

🌈 Ⅴ Git 远程操作
01. 创建远程仓库
在 Git 托管平台(如 GitHub、Gitee、GitLab)创建仓库,拿到仓库地址(HTTPS 或 SSH)。
- 在网页右上角找到 + 号,然后点击新建仓库。

- 分别填写仓库名、路径名,选择开源,最后点击创建。
- 注:在实际开发中,仓库名一般都是项目名。

- 创建之后进入到如下图所示界面即创建成功。

02. 克隆远程仓库
使用 HTTPS
git clone https://host/user/repo.git

2.1 使用 HTTPS 将远程仓库克隆到本地
- 先拷贝一份远程仓库的 HTTPS 远程仓库链接。

使用 SSH
git clone git@host:user/repo.git
- 在本地的机器的任意目录下输入
git clone 刚刚拷贝过来的 HTTPS 远程仓库链接即可。- 注意:git clone 操作不能在任何一个本地仓库目录下执行。

2.2 使用 SSH 将远程仓库克隆到本地
- 直接 git clone SSH 链接是会失败的,需要先配置 SSH 公钥才行。
1. 配置 SSH 公钥
- 依次在 gitee 个人主页点击 设置、SSH 公钥 进入以下界面。

在你的用户主目录下使用
ls -al指令查看是否存在一个.ssh目录。- 存在
.ssh目录:再查看是否存在id_rsa和id_rsa.pub这两个文件。
如果id_rsa和id_rsa.pub都有则直接跳转到第 4 步。
如果没有,则跳转到第 3 步。 - 不存在
.ssh目录:使用mkdir .ssh创建该目录,然后跳转到第 3 步。
- 存在
创建 SSH Key:在你的用户主目录下输入
ssh-keygen -t rsa -C "和你的 gitee 关联的邮箱",然后一路回车即可。使用
cd .ssh进入 .ssh 目录,此时再使用cat id_rsa.pub显示公钥内容,然后将公钥内容全部拷贝下来,再到第一步打开的 gitee 配置公钥界面,将拷贝的内容全部粘贴然后确认即可。


2. 使用 SSH 将远程仓库克隆到本地
- 先拷贝一份远程仓库的 SSH 远程仓库链接。

在本地的机器的任意目录下输入
git clone 刚刚拷贝过来的 SSH 远程仓库链接即可。- 注意:git clone 操作不能在任何一个本地仓库目录下执行。

03. 向远程仓库推送
- Git 提供了两种向远程仓库推送的方式:
git push 远程主机名 本地分支名:远程分支名 # 远程主机名默认为 origin
git push 远程主机名 本地分支名 # 远程和本地分支名相同时可省略冒号后的内容
克隆完远程仓库后,如果在本地对该仓库的某个分支进行了修改,远程仓库是看不到这些修改的,需要进行一次 push 操作将本地仓库中的内容推送到远程仓库。
注:在 push 前,要确保在该仓库下已经准备好了 name 和 email 配置项目。配置的 name 得是你自己 gitee 的用户名,email 得是你自己 gitee 的邮箱。
动图演示向远程仓库 push 推送
如果在克隆远程仓库时用的是 HTTPS 的方式,每次 push 都要输入 gitee 的用户名和密码。SSH 则不用。

- 在 gitee 的该仓库的 master 分支下可以看到确实推送上来了一个 file 文件。

04. 拉取远程仓库
git pull 远程主机名 远程分⽀名:本地分⽀名 # 远程主机名默认为 origin,将远程分支合并到本地分支
git pull 远程主机名 本地分支名 # 如果远程分支与本地分支同名,可省略冒号后内容
如果本地仓库的内容领先于远程仓库,则需要执行 push 操作将本地仓库的内容推送到远端。
如果远程仓库的内容领先于本地仓库,则需要执行 pull 操作将远程仓库的内容拉取到本地。
如果对你的远程仓库进行了修改,就需要将远程仓库 pull 拉取到本地,不然之后无法将本地的内容 push 推送到远程仓库。
演示 pull 操作
在 gitee 上对 git code 仓库的 ReadMe.en.md 文件添加一行 hello world! 文本内容。
注:本次直接修改远程仓库为模拟,在实际工作中一定不要直接修改远程仓库。正常是通过将本地仓库的内容 push 到远端来修改远程仓库的内容。


- 此时,远程仓库是要领先于本地仓库⼀个版本,为了使本地仓库保持最新的版本,我们需要拉取远端代码,并合并到本地。Git 提供了
git pull命令,该命令用于从远程获取代码并合并本地的版本。

03. 向远程仓库推送
git push origin branchname
# 若是首次推送并建立远程分支:
git push -u origin branchname
04. 拉取远程仓库
- 拉取并合并远程改动到本地:
git pull
- 只获取(不合并):
git fetch
🌈 Ⅵ Git 标签管理
01. 创建标签
在 gitee 中标签 tag 是对某次 commit 的⼀个标识,相当于起了⼀个别名。
例如:在项目发布某个版本的时候,针对最后⼀次 commit 起⼀个 v1.0 这样的标签来表示这是发布的第一个版本。
相较于难以记住的 commit id,gitee 的 tag 就很好的解决这个问题,因为 tag ⼀定要给⼀个让人容易记住,且有意义的名字。当我们需要回退到某个重要版本时,直接使用标签就能很快定位到。
- 轻量标签:
git tag v1.0
- 带注释的标签:
git tag -a v1.0 -m "release v1.0"
- 打标签操作是针对某一次的提交 commit 进行的。
1. 打标签
- 切换到需要打标签的分支上。
- 使用
git tag 标签名指令创建一个新标签。 - 默认标签是打在最新提交的 commit 上的,只要 commit 一下就能打上刚刚创建的标签了。

2. 查看标签
git tag # 用来查看存在哪些标签

02. 删除本地标签
git tag -d 标签名

03. 推送标签至远程
在本地创建的标签都只存储在本地,不会自动推送到远程。因此,打错的标签可以放心的在本地进行删除。
1. 推送单个标签
git push origin 标签名 # 推送指定标签至远端
将 v1.0 标签推送至远程仓库,然后就能看到 gitee 的远程仓库多了个 v1.0 标签了。

2. 推送全部标签
- 如果本地有很多标签的话,也可以一次性全部推送到远端。
git push origin --tags # 推送全部标签至远端

04. 删除远程标签
- 如果标签已经被推送至远程,由于不能直接修改远程仓库,所以删除标签就稍微麻烦一点。
删除远程标签步骤
- 先在本地使用
git tag -d 标签名删除指定标签。 - 然后使用
git push origin :标签名将所作的删除操作推送至远端。

附:常用快捷命令速览
# 初始化
git init
# 配置
git config --global user.name "name"
git config --global user.email "email"
# 常用流程
git add .
git commit -m "msg"
git push origin main
# 查看
git status
git log --oneline
git diff
# 分支
git branch
git checkout -b feature
git merge feature
# 回退
git reset --hard HEAD~1
git revert <commit>
# 远程
git clone <url>
git fetch
git pull
支付宝打赏
微信打赏
赞赏是不耍流氓的鼓励