Git学习笔记
发布时间 :
字数:3.5k 阅读 :
本人git学习笔记,接受批评指正。
原文:Git学习笔记 - LINUX SB
一、何为Git
1.概述
Git是一款免费、开源的分布式版本控制系统,核心用于追踪文件修改、记录代码版本迭代、实现多人协同开发。与传统集中式工具不同,Git没有绝对依赖的中央服务器,每一台开发者的电脑都拥有完整的版本仓库,断网状态下仍可完成版本提交、分支管理等操作,仅在代码同步、协同开发时需要网络,安全性和灵活性更高。
2.版本控制器的方式(SVN、CVS)
(1)集中式版本控制工具
- 核心特点:存在唯一中央服务器,所有版本数据统一存储在中央仓库,本地电脑仅保存当前开发的工作文件。
- 工作限制:必须联网才能拉取代码、提交修改、查看版本记录,一旦中央服务器故障,整个开发团队无法进行版本操作。
- 适用场景:小型团队、简单项目,版本迭代流程单一的开发场景。
(2)分布式版本控制工具(Git)
- 核心特点:无绝对中央服务器,每台开发者设备都拥有完整版本仓库,包含所有历史提交记录、分支信息、版本日志。
- 工作优势:离线可用,本地可独立完成版本提交、回退、分支创建合并;服务器仅作为代码同步的中转站,任意设备故障不影响整体版本数据。
- 适用场景:大中型团队、多人协同开发、高频迭代、需要版本追溯和多分支并行开发的项目。
3.工作流程
Git本地工作分为三大核心区域,所有文件操作均遵循固定流转规则:
- 工作区(Workspace):本地项目真实文件夹,日常编写、修改、删除代码的区域(原始文件目录)。
- 暂存区(Index/Stage):临时缓存区域,用于存放待提交的文件修改,可精准筛选需要提交的代码变更。
- 本地仓库(Repository):本地版本数据库,永久保存每一次提交的版本记录,可随时回溯任意历史版本。
完整流转链路:工作区修改文件 → git add 提交至暂存区 → git commit 提交至本地仓库(生成唯一版本记录) → 按需 git push 同步至远程仓库
4.使用场景
- 数据备份:所有代码版本自动留存,避免误删、文件丢失问题。
- 代码还原:支持任意历史版本回退,快速修复代码bug、撤销错误修改。
- 协同开发:多人并行开发,通过分支隔离功能,避免代码互相覆盖冲突。
- 问题追溯:精准定位每一行代码的修改人、修改时间、修改内容,快速排查版本问题。
- 版本管理:适配项目迭代、版本发布(测试版、正式版),支持标签管理固定版本。
二、Git的本地仓库搭建
本地仓库无需复杂配置,任意空文件夹/项目文件夹均可快速初始化,步骤如下:
- 打开需要搭建仓库的项目文件夹(任意本地目录);
- 文件夹空白处右键,选择 Git Bash Here 打开终端;
- 执行初始化指令,自动生成隐藏的.git文件夹(版本仓库核心目录,默认隐藏无需手动修改)。
执行成功后,目录中会生成隐藏的.git文件夹,代表本地仓库搭建完成,当前目录所有文件已纳入Git管理范围。
三、基础操作指令
1.操作过程
git工作目录对于文件的修改(增加、删除、更新)
| 操作 | 工作区(workpace) | 缓存区(index) | 仓库(repository) |
| 创建新文件 > | 未跟踪(untracked) >git add | 已暂存(staged) >git commit | 进入到仓库就成为一次提交记录 commit1 |
| 修改已有文件 > | 未暂存(unstaged) >git add | 已暂存(staged) >git commit | 进入到仓库就成为一次提交记录 commit2 |
2.基础操作指令
| 指令 | 作用 |
| git init | 在当前目录创建git本地仓库 |
| git add 单个文件名/通配符”.” | 添加工作区文件到缓存区 |
| git commit -m “注释内容” | 提交缓存区文件到仓库 |
| git status | 查看文件修改状态(缓存区、工作区) |
| git log [options] | 查看提交的日志 |
--all | 显示所有分支 |
--pretty=oneline | 显示提交信息为一行 |
--abbrev-commit | 使得输出的commit更简短 |
--graph | 以图片显示 |
git reset --hard commitID | 版本切换,版本回退。commitID可以用git log查看 |
| git reflog | 查看已删除的提交记录 |
(1)git add
- 用于将工作区的新增、修改、删除操作提交到暂存区,支持单文件、多文件、全文件提交。
1 2 3 4 5 6 7 8 9 10
| # 添加单个文件到缓存区 git add index.html # 添加多个文件到缓存区 git add git/git.md linux index.html # 添加所有文件到缓存区 git add --all # 删除工作区文件,并且将这次删除放入暂存区 git rm index # 停止追踪指定文件,但该文件会保留在工作区 git rm --cached [file]
|
(2)git commit
- 将暂存区所有变更固化为正式版本,生成唯一commit版本ID,必须添加备注说明版本修改内容。
1 2 3 4
| # 提交文件到本地仓库并备注说明 git commit -m "first commit" # 提交时显示所有diff信息 git commit -v
|
(3)git status
- 实时查看当前文件状态(未跟踪、未暂存、已暂存),排查代码变更情况。
1 2 3 4
| # 查看当前仓库状态 git status # 查看当前仓库状态,简化输出 git status -s
|
(4)git log
- git log:查看当前分支正向历史提交记录;git reflog:查看所有操作记录(包含已回退、删除的版本,用于找回丢失版本)。
1 2 3 4 5 6
| # 查看日志信息(只查看当前head和之前的日志信息) git log # 简洁日志信息 git log --oneline # 查看所有的提交变更日志 git reflog
|
(5)git config
- 首次使用Git必须配置用户名和邮箱,用于标识代码提交人,分为局部配置(当前仓库)和全局配置(所有仓库)。
1 2 3 4 5 6 7 8
| # 查看仓库配置信息 git config --list # 设置仓库的用户名和邮箱 git config user.name lisi git config user.email 1234@qq.com # 全局配置用户名和邮箱 git config --global user.name lisi git config --global user.email 1234@qq.com
|
3.忽视不需要管理的文件
项目中部分文件无需版本管理(日志、缓存、配置密钥、编译文件),可通过.gitignore文件忽略,Git不会追踪、提交该类文件。
(1)创建方式
- 项目根目录右键打开Git Bash,执行指令创建文件:
touch .gitignore
(2)常用忽略规则(直接写入文件生效)
1 2 3 4 5 6 7 8 9 10 11
| # 忽略所有txt后缀文件 *.txt # 忽略指定文件夹 node_modules/ dist/ build/ # 忽略日志文件 *.log # 忽略系统隐藏文件 .DS_Store .git
|
四、分支
分支是Git核心功能,支持多分支并行开发,主干分支稳定迭代,功能分支独立开发、测试,完成后合并至主干,互不干扰,极大降低团队开发冲突概率。
1.常用分支指令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| # 1.分支查看和创建 git branch # 列出所有本地分支 git branch -r # 列出所有远程分支 git branch [分支名] # 在当前分支上添加分支(不切换到新分支) git branch -f [移动的分支名] [目的的分支名] # 强制从一个分支移动到另一个分支的位置 # 2.删除分支(不能删除当前分支,只能删除其他分支) git branch -d [分支名] # 删除分支时,需要做各种检查 git branch -D [分支名] # 不做任何检查,强制删除 # 3.切换分支(head表示当前所在分支) git checkout [分支名] # 切换分支 git checkout -b [分支名] # 创建并切换到新分支 # 4.合并分支 # 一般需要切换当前分支到(head指向)master,再把需要合并的分支合并到master git merge [分支名] # 当前分支(head指向的分支)与合并分支产生新节点,当前分支(head指向的分支)移动到合并的新节点 # 5.复制分支 git rebase [分支名] # 把当前分支(HEAD指向的分支)复制到另一个分支下 git rebase -i HEAD~<num> # 把当前分支(HEAD指向的分支)的前num个节点复制到第num个节点下 git cherry-pick <num1,num2..> # 把num1,num2节点按其输入顺序复制到当前分支的节点下 # 6.撤销变更 # 在你的本地分支中使用 git reset 很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的。为了撤销更改并分享给别人,我们需要使用 git revert。 git reset HEAD~1 # 当前分支撤销回上一个节点(不生成新节点) git reset --hard [commit_id] # 将本地仓库回退到本次提交(我选的是最近一次提交的版本id,当然可以是任何一个id) git revert HEAD # 在撤销的节点c2下产生新的节点c2,c2更改刚好是用来撤销 C2 这个提交的。
|
2.分支冲突(conflict)
多人协同开发时,多个分支修改了同一个文件的同一行代码,合并分支时Git无法自动判断保留哪份代码,即产生分支冲突(conflict),是团队开发最常见问题。
- 对于同一个文件,如果有多个分支需要合并时,容易出现冲突。
- 合并分支时,如果出现冲突,只能手动处理,再次提交,一般的作法,把自己的代码放到冲突代码的后面即可。
3.解决冲突
- 发现冲突:执行git merge后终端提示CONFLICT,合并中断;
- 打开冲突文件:文件中会出现冲突标记,
<<<<<<< 与 ======= 分隔线上方为当前分支(主干)代码,======= 与 >>>>>>> 之间为待合并分支代码; - 手动修改代码:删除冲突标记,保留最终需要的代码(先协商、再确定是保留单方或整合双方代码);
- 重新提交:修改完成后,执行git add . → git commit -m “解决xx分支合并冲突”;
- 完成合并:冲突解决,分支合并完成。
五、Git远程仓库
本地仓库仅自己可见,通过Gitee/GitHub远程仓库,可实现代码云端备份、多人协同开发、跨设备同步代码。以下以Gitee为例完整实操。
1.远程仓库搭建
第一步:Gitee创建空仓库
- 登录Gitee官网(gitee.com),注册并登录账号;
- 点击右上角「新建仓库」;
- 填写仓库名称、简介,默认私有/公开,不要勾选初始化README(避免冲突),点击创建。
第二步:SSH密钥配置(免密推送代码)
1 2 3 4 5 6 7
| # 1. 生成SSH密钥(替换为自己的Gitee邮箱) ssh-keygen -t rsa -C "你的Gitee邮箱@qq.com" # 全程回车,无需输入任何内容,自动生成密钥文件 # 2. 查看并复制公钥 cat ~/.ssh/id_rsa.pub # 3. 验证密钥是否配置成功 ssh -T git@gitee.com
|
第三步:Gitee绑定公钥
- Gitee官网点击头像 → 设置 → SSH公钥;
- 标题自定义(如个人电脑),粘贴刚才复制的公钥内容;
- 点击确定,完成绑定。
2.远程仓库指令
(1)远程仓库关联管理
1 2 3 4 5 6 7 8 9 10
| # 查看远程仓库 git remote # 查看远程仓库详细信息 git remote -v # 添加远程仓库 git remote add [仓库命名] [url] git remote add origin git@gitee.com:mumulei/studyData.git # 删除远程仓库 git remote remove [仓库命名] git remote remove origin
|
(2)远程项目推送/拉取/克隆
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 克隆远程仓库数据 git clone [url] git clone git@gitee.com:mumulei/studyData.git # 从远程仓库下拉,不合并 git fetch [仓库名称] git fetch origin # 从远程仓库下拉并且合并 git pull [仓库命名] [分支名称] git pull origin master # 推送到远程仓库 git push [仓库命名] [分支名称] git push origin master # 模拟团队其他成员远程提交 git fakeTeamwork
|
六、其他指令
(1)git diff
1 2 3 4
| # 显示暂存区和工作区的差异 git diff # 显示两次提交之间的差异 git diff [first-branch]...[second-branch]
|
(2)git apply
1 2 3 4 5 6
| # 检测补丁是否适用当前工作区或索引并检测错误 git apply --check a.diff # 应用该补丁,-p1表示忽略/标识的前导目录,与 patch -p1 < a.diff 命令几乎相似 git apply -p1 a.diff # 修补程序仅应用于索引 git apply --cached -p1 a.diff
|
(3)git tag
- 用于标记项目正式版本(v1.0、v2.0),固定版本节点,方便版本发布与回溯。
1 2 3 4 5 6 7 8
| # 为当前版本创建标签 git tag v1.0 # 为指定commit版本创建标签 git tag v1.0 commitID # 查看所有本地标签 git tag # 推送标签到远程仓库 git push origin v1.0
|
七、Git免费实操练习平台
推荐新手沉浸式练习Git分支、合并、变基等操作,可视化界面,零成本实操,快速掌握Git核心逻辑:
练习地址:https://learngitbranching.js.org
练习建议:从入门关卡开始,依次完成提交、分支、合并、cherry-pick、rebase等关卡,全程实操,快速吃透Git核心用法。
八、新手常见问题补充
1. 首次推送报错 fatal: no upstream
解决方案:绑定本地分支与远程分支关联关系,执行:git push -u origin master(首次推送只需一次,后续直接git push)
2. 本地代码覆盖远程代码
强制推送(谨慎使用,仅个人仓库可用,团队仓库禁止):git push -f origin master
3. 放弃本地所有修改,同步远程最新代码
1 2
| git fetch origin git reset --hard origin/master
|
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 hi@0xxx.top