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整体的工作流程
Git配置
在使用git之前,你需要配置一些基本的信息.如用户名,邮箱,密码等,以下为相关的命令.
# 查看配置信息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配置好了之后,你就可以创建并管理属于你的仓库了.
# 新建仓库,默认分支名mastergit 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>工作区,暂存区,本地仓库管理
当创建好仓库后,就可以在你的工作区中新增,修改文件了.
# 查看当前工作区状态# 如哪些文件是新建的,哪些文件是修改的等.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 <分支名>远程仓库管理
# 查看远程仓库地址git remote -v
# 设置远程仓库地址git remote add <别名> <远程仓库URL>
# 移除远程仓库地址git remote remove <别名>
# 修改远程仓库地址git remote set-url <别名> <远程仓库URL>远程仓库的使用
# 首次推送新分支,该命令可以通过设置以下配置项,免除打这条命令的烦恼# git config --global push.autoSetupRemote truegit push -u <别名> <分支名>
# 普通推送git push
# 推送本地所有分支git push --all <别名>
# 克隆项目git clone <远程仓库URL>
# 从远程仓库拉取最新代码git pull <别名> <分支名>
# 只获取更新但不合并,意思就是只看不改本地git fetch <别名>其它用法
搁置工作区
正在开发新功能时,突然要求去修一个紧急bug,但新功能还没有写完无法提交时使用.
注意,stash功能只会暂存已跟踪文件,也即手动
git add的文件.
# 将当前工作现场搁置,此时工作区是干净的# 当前工作区将回到上次提交时的状态,本次修改但未提交的内容将会被搁置.git stash
# 查看现有的储藏记录git stash list
# 取消搁置,恢复工作区,删除list中的记录git stash pop
# 取消搁置,恢复工作区保留list中的记录git stash apply
# 删除搁置,不恢复工作区.git stash drop查看差异
# 查看工作区与暂存区的差异,还没 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,Teach23. 打开WindTerm,拆分上下窗口,上显示Teach1,下显示Teach24. 按如下提示演示命令.# 快速演示:Git基本用法# 1. 初始化本地仓库git initgit 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.mdgit add readme.mdgit commit -m "在develop分支新增第二行内容"
# 切回主分支git checkout master
# 此时master上的readme.md只有一行,develop上的有两行cat readme.md
# 将develop合并到mastergit merge develop
# 再次查看文件,已经合并了两行内容cat readme.md
# 4. 搁置工作区# 准备演示git checkout develop
# 代码写一半,还没写完,老板说你加急修个BUGecho "正在写的半成品" >> readme.mdgit status
# 突然要切分支去干别的事,先把半成品藏起来,不影响处理紧急的事情git stash
# 工作区变干净了git status
# 查看一下readme.md,刚刚写的半成品没有了,被"暂存"了cat readme.md
# 干完别的事,把半成品取回来git stash popgit 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支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!






















