视频加载失败

Git基础命令

3243 字
16 分钟
Git基础命令
Git基础命令

Git的相关概念#

Git是什么?#

Git是一个开源,免费的分布式版本控制系统.

简单理解为,Git是一个代码的时光机.

Git的作用#

Git的作用主要有三个

  • 版本回溯: 论文写到第10版,突然发现第8版之后的方向全错了.没Git,你得凭记忆一点一点改回去;有Git,一行命令瞬间回到第8版,干干净净.
  • 协作开发: 和同学合写论文,你改完发Word给他,他改完发回来,来回几次你俩都搞不清谁改了哪,哪份是最新的.有Git,各自改各自的,Git自动把内容拼到一起,谁改了什么一清二楚.
  • 试错: 导师给了个新方向,你想试试但怕把现在的稿子搞乱.那就开个分支,相当于复印一份,在复印件上随便折腾.试成了,把内容合回原件;试崩了,复印件一扔,原件纹丝不动.

Git的五个组成部分#

Git主要由五个部分组成

工作区,暂存区,本地仓库,远程仓库,搁置区.

工作区: 正在使用的文件

是什么? 这里的文件是当前正在使用的项目文件夹.存放了正在操作的源代码文件

作用: 实际进行开发的地方,在这里可以随意新建,删除,修改文件. 在这里,可以将文件暂存到暂存区.或者将你的修改搁置 到搁置区中.

类似于 你正在电脑前写毕业论文,桌面上摊着各种参考资料,草稿纸,未整理的数据表格,写完的或者写了一半的论文文档.这些正在编辑的.docx文件就是你的工作区,环境可能是乱糟糟的,但这就是你创造的地方.

暂存区: 电脑本地在提交之前用于预览工作区文件副本的区域

是什么? 这是一个中间层,将工作区中准备提交的改动添加进来,拍摄一份快照.

作用: 起到筛选与预览的作用,比如可能改了3个文件,但只想提交其中的一个,就可以把这一个文件放进暂存区.

类似于 你从杂乱的草稿中,挑选了几页觉得还不错的章节,复制到一本专门的“预览稿”文件夹里,整理好格式.这个文件夹里的内容,就是你准备稍后正式“装订成册”( 提交)的内容.

本地仓库: 电脑本地的仓库

是什么? 位于当前项目文件夹下的一个隐藏文件夹.git

作用: 这里的文件是已经被永久保存的版本历史.

类似于 你电脑里存档的“毕业论文v1.doc”,“毕业论文 v2.doc”,“毕业论文_终稿.doc”.这是你个人的成果库,贴上了版本号,只有你自己能看到.每次提交(commit)就像是给当前的论文拍个快照,存进这个档案库.

远程仓库: 服务器上的仓库

是什么? 是一个位于远程服务器(GitHub,Gitea等)上的仓库副本

作用: 这是团队协作的中心节点,你把本地仓库的版本同步上去,队友就能拉取你的代码.同时还是你的代码的异地备份,防止你电脑坏了代码丢失.

类似于 你终于把论文写好了,上传到了知网(CNKI)或者学校的论文提交系统.这样全世界的学者都能来检索,下载(拉取) 你的论文.同时这也是一个异地备份,防止你电脑坏了论文丢失.

搁置区: 临时存储区

是什么? Git提供的一个临时存储区域,用于存放当前工作区中未提交的修改.

作用: 应对突发任务,当你写了一半代码,突然需要切换分支去修一个紧急 Bug 时,用搁置把当前的工作现场“藏”起来,让工作区变干净.等修完 Bug,再“取”出来继续写没写完的代码.

类似于: 你正在写“数据分析”这一章,突然导师发微信说:“赶紧把摘要和关键词按新格式改一下,马上要初审!” 但你数据分析才写一半,既不想作为正式版本提交(commit),也不想弄丢.于是你把写了一半的草稿临时塞进抽屉(搁置区) 里,锁上,让桌面变干净.等处理完初审,再打开抽屉把稿子拿出来继续写(取消搁置).

Git整体的工作流程#

暂存(add)

提交(commit)

推送(push)

拉取(fetch)

合并(merge)

拉取并合并(pull)

搁置(stash)

取消搁置(stash pop)

当前工作区

暂存区

本地仓库

远程仓库

搁置区

暂存(add)

提交(commit)

推送(push)

拉取(fetch)

合并(merge)

拉取并合并(pull)

搁置(stash)

取消搁置(stash pop)

当前工作区

暂存区

本地仓库

远程仓库

搁置区

Git配置#

在使用git之前,你需要配置一些基本的信息.如用户名,邮箱,密码等,以下为相关的命令.

Terminal window
# 查看配置信息
git config --list
# 设置用户名
git config --global user.name "<用户名>"
# 设置邮箱
git config --global user.email "<邮箱>"
# 设置保存密码(避免每次推送都输入密码,通常配合HTTPS使用)
git config --global credential.helper store
# 仅对当前仓库设置用户名/邮箱等,不再使用全局配置,去掉--global就可以,优先级高于全局.
git config user.name "<用户名>"
# 配置默认分支名master
# git config --global init.defaultBranch master
# 配置自动设置上游分支,推送新分支时,在远程仓库将会自动创建同名新分支,相当于git自动做了以下事
# git push -u <别名> <分支名>
git config --global push.autoSetupRemote true

本地仓库管理#

当把git配置好了之后,你就可以创建并管理属于你的仓库了.

Terminal window
# 新建仓库,默认分支名master
git init
# 首次空提交,若没有本次提交,则很多操作都会受到限制.
git commit --allow-empty -m "初始化仓库"
# 移除仓库但不删除当前源代码(Windows): 手动删除项目文件夹下的.git目录亦可.(示例命令)
rd .git -Recurse -Force
# 查看git提交日志
git log
# 查看git提交日志,推荐加上单行模式,这样更清晰.
git log --oneline
# 查看最近5次提交
git log -5 --oneline
# 查看已删除的记录
git reflog
# 回退版本
git reset --hard <hash>

工作区,暂存区,本地仓库管理#

当创建好仓库后,就可以在你的工作区中新增,修改文件了.

Terminal window
# 查看当前工作区状态
# 如哪些文件是新建的,哪些文件是修改的等.
git status
# 将指定文件暂存到暂存区
git add <文件名>
# 将所有文件暂存到暂存区
git add .
# 从暂存区中移除文件
git rm --cached <文件名>
# 从暂存区中移除所有文件
git rm --cached -r .
# 提交
git commit -m "提示语"
# 暂存已跟踪文件并提交
git commit -am "提示语"

分支管理#

Git 简单来说分支就是一条独立的开发线,它允许在不影响主线(main/master)的情况下,并行开展新功能开发,Bug修复或实验性工作.

就相当于在写论文,论文在本次修改之前已经复印了一份,无论怎么改复印件,也不会影响到原件件.

核心就一个词: 隔离. 隔离修改与现有的代码.

# 查看分支及当前分支
git branch
# 查看分支及各分支的最新提交信息
git branch -v
# 新建分支
git branch <分支名>
# 切换分支
git checkout <分支名>
# 新建并切换分支
git checkout -b <分支名>
# 删除分支(普通删除)
git branch -d <分支名>
# 删除分支(强制删除)
git branch -D <分支名>
# 将指定的分支合并到当前分支上
git merge <分支名>

远程仓库管理#

Terminal window
# 查看远程仓库地址
git remote -v
# 设置远程仓库地址
git remote add <别名> <远程仓库URL>
# 移除远程仓库地址
git remote remove <别名>
# 修改远程仓库地址
git remote set-url <别名> <远程仓库URL>

远程仓库的使用#

Terminal window
# 首次推送新分支,该命令可以通过设置以下配置项,免除打这条命令的烦恼
# git config --global push.autoSetupRemote true
git push -u <别名> <分支名>
# 普通推送
git push
# 推送本地所有分支
git push --all <别名>
# 克隆项目
git clone <远程仓库URL>
# 从远程仓库拉取最新代码
git pull <别名> <分支名>
# 只获取更新但不合并,意思就是只看不改本地
git fetch <别名>

其它用法#

搁置工作区#

正在开发新功能时,突然要求去修一个紧急bug,但新功能还没有写完无法提交时使用.

注意,stash功能只会暂存已跟踪文件,也即手动git add的文件.

Terminal window
# 将当前工作现场搁置,此时工作区是干净的
# 当前工作区将回到上次提交时的状态,本次修改但未提交的内容将会被搁置.
git stash
# 查看现有的储藏记录
git stash list
# 取消搁置,恢复工作区,删除list中的记录
git stash pop
# 取消搁置,恢复工作区保留list中的记录
git stash apply
# 删除搁置,不恢复工作区.
git stash drop

查看差异#

Terminal window
# 查看工作区与暂存区的差异,还没 add 的改动
git diff
# 查看暂存区与最新提交版本的区别,已经 add 但还没 commit 的改动
git diff --cached
# 查看两个版本之间的差异
git diff <hash1> <hash2>

冲突时是什么样的?

master : file01: content1

dev: file01: content2

那么在合并分支时,文件内容会变更为以下内容,其中等号上半部分为HEAD,也即当前分支的内容,下半部分为要合并的分支的内容,此时是发生了合并冲突.

解决方法为,将等号上或下的部分,保留一个,并删除<<<<<<<或>>>>>>>行,或者直接清空文件,输入想要保存的内容,之后再进行提交即可解决冲突.

<<<<<<< HEAD

content1

=======

content2

>>>>>>> dev

Git快速演示示例#

准备
1. 启动Gitea,查看是否创建了test空仓库,若未创建,则先创建.若已有提交,则重新创建.
2. 新建两个文件夹 Teach1,Teach2
3. 打开WindTerm,拆分上下窗口,上显示Teach1,下显示Teach2
4. 按如下提示演示命令.
Terminal window
# 快速演示:Git基本用法
# 1. 初始化本地仓库
git init
git commit --allow-empty -m "初始化仓库"
# 2. 基本开发流程: 修改,暂存(add),提交(commit).
# 假设你新建了一个文件
echo "Hello Git" > readme.md
# 查看状态,会显示readme.md是未跟踪文件(Untracked files:)
git status
# 暂存该文件
git add readme.md
# 再次查看状态,文件已进入暂存区
git status
# 提交到本地仓库
git commit -m "新增readme文件"
# 查看提交日志
git log --oneline
# 3. 分支操作
# 新建并切换到开发分支
git checkout -b develop
# 在开发分支上修改文件
echo "第二行内容" >> readme.md
git add readme.md
git commit -m "在develop分支新增第二行内容"
# 切回主分支
git checkout master
# 此时master上的readme.md只有一行,develop上的有两行
cat readme.md
# 将develop合并到master
git merge develop
# 再次查看文件,已经合并了两行内容
cat readme.md
# 4. 搁置工作区
# 准备演示
git checkout develop
# 代码写一半,还没写完,老板说你加急修个BUG
echo "正在写的半成品" >> readme.md
git status
# 突然要切分支去干别的事,先把半成品藏起来,不影响处理紧急的事情
git stash
# 工作区变干净了
git status
# 查看一下readme.md,刚刚写的半成品没有了,被"暂存"了
cat readme.md
# 干完别的事,把半成品取回来
git stash pop
git status
# 再查看一下readme.md,刚刚写的半成品回来了.
cat readme.md
# 5. 关联远程仓库并推送
# 添加远程仓库地址(别名常用origin)
git remote add origin http://127.0.0.1:3000/Yuili/test.git
# 首次推送master分支,并建立追踪关系
git push -u origin master
# 之后修改提交,只需
git push
# 6. 克隆与拉取
# 别人拿到你的仓库地址后,克隆到本地
git clone http://127.0.0.1:3000/Yuili/test.git
cd test
# 当远程有更新时,拉取最新代码
git pull

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Git基础命令
https://kulve.tech/posts/yuili/笔记/git工具入门/
作者
Kulve
发布于
2026-08-11
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Kulve
Hello, I'm Kulve.
公告
你好,欢迎来到我的博客
分类
标签
最新动态
站点统计
文章
17
分类
8
标签
23
总字数
29,467
运行时长
0
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.7
文章许可
CC BY-NC-SA 4.0
文章目录