一. Git是什么?
Git 是一个分布式版本控制系统(Version Control System, VCS),由 Linus Torvalds 于 2005 年开发,最初用于管理 Linux 内核的开发。它的核心功能是跟踪文件的变化,帮助开发者协同工作、管理代码历史,并支持高效的分支与合并操作。
Git 的核心特点:
- 分布式:每个开发者本地都有完整的代码仓库(包括完整历史),不依赖中央服务器。
- 高效:对分支和合并的优化使得 Git 在处理大型项目时非常快速。
- 完整性:通过 SHA-1 哈希保证数据完整性,任何修改都会被记录。
- 灵活性:支持非线性开发(如分支、标签、暂存区等)。
核心概念:
- 仓库(Repository) :存储项目代码和历史的数据库。
- 提交(Commit) :一次代码变化的快照,包含唯一的哈希 ID。
- 分支(Branch) :独立开发的线路,默认分支通常是
main或master。 - 远程仓库(Remote) :托管在服务器上的共享仓库(如 GitHub、GitLab)。
二,Git 工作流程
Git 的工作流程通常分为以下几个阶段:
1. 初始化/克隆仓库
git init:将本地目录初始化为 Git 仓库。git clone <远程仓库地址>:下载远程仓库到本地。
2. 修改文件
- 在工作目录中修改代码文件。
3. 暂存变更(Staging Area)
git add <文件名>:将文件的修改添加到暂存区(准备提交)。git add .:暂存所有变更。
4. 提交变更(Commit)
git commit -m "提交描述":将暂存区的变更保存为一个提交记录。
5. 同步远程仓库
git pull:从远程仓库拉取最新代码(相当于git fetch + git merge)。git push:将本地提交推送到远程仓库。
6. 分支管理
git branch:查看分支。git checkout -b <新分支名>:创建并切换到新分支。git merge <分支名>:合并分支到当前分支。
三,基本使用
Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。
- git add (工作区 →>暂存区)
- git commit (暂存区->本地仓库)
1,创建本地仓库
git init 获取本地仓库 要使用Git对我们的代码进行版本控制,首先需要获得本地仓库
1)在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库
2)进入这个目录中,点击右键打开Git bash窗口
3)执行命令git init
4)如果创建成功后可在文件夹下看到隐藏的.git国录。
2,查看修改的状态
git status
未跟踪的状态
未暂存状态
放入暂存区,即将提交到仓库的状态
没有新建或修改或暂存的状态
3,提交到暂存区
git add .
4,提交到本地仓库
git commit -m “ 解释该代码做了什么”
5,查看提交日志,即查看提交的历史
git log
6,版本回退
git reset –-hard commitID
如果回退后又想回到回退前时,可以查看删除的记录
git reflog
查看到上一个版本便可以回退回去
如果有不需要git管理的文件,可把文件写在 .gitignore里
vi .gitignore后进入的文件编辑,把所有以a结尾的文件都不放入git中管理
四,分支
1,查看分支
git branch
2,创建分支
git branch 分支名
3,切换分支
git checkout 分支名
4,创建并切换到该分支
git checkout -b 分支名
5,查看当前分支日志
git-log
HEAD指的是当前分支
dev0分支添加了file02,但其他分支没有,故会显示不一样
6,合并,一般把小分支合并到主分支上
这里展示的是把dev01合并到master上(需要合并代码到哪个分支,就切换到哪个分支)
合并时会跳入编辑区域,只要:wq保存即可
合并后的效果如下:
7,删除分支
git branch -d 分支名 不能删除当前分支,只能删除其他分支
git branch -d b1 删除分支时,需要做各种检查
git branch -D b1 不做任何检查,强制删除
8,解决冲突
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:
- 处理文件中冲突的地方
- 将解决完冲突的文件加入暂存区(add)
- 提交到仓库(commit)
冲突部分的内容处理如下所示:
9,开发中分支使用原则与流程
几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
在开发中,一般有如下分支使用原则与流程:
-
master (生产)分支
- 线上分支:主分支,中小规模项目作为线上运行的应用对应的分支;
-
develop(开发)分支
- 是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。
-
feature/xxxx分支
- 从develop创建的分支 一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到 develop分支.
-
hotfix/xxxx分支
- 从master派生的分支,一般作为线上bug修复使用 修复完成后需要合并到master,test,develop分支。
-
还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等等。
五,远程仓库
如果还没有远程仓库时,把原本没有放入远程仓库的代码添加到远程仓库
git remote add 远程仓库名 远程仓库的地址
查看当前有无远程仓库
git remote
查看当前本地仓库配置的所有远程仓库的详细信息
git remote -v
查看远程分支列表
git branch -r
查看本地分支与远程分支的关系
git branch -vv
把本地仓库代码推到远程仓库中,建立了关联关系后,可以直接用git push
推送到远程仓库
- 命令: git push [-f][--set-upstream][远端名称[本地分支名][:远端分支名]]
- 如果远程分支名和本地分支名称相同,则可以只写本地分支
- git push origin master。-f表示强制覆盖
- --set-upstream推送到远端的同时并且建立起和远端分支的关联关系。
- git push --set-upstream origin master
- 如果当前分支已经和远端分支关联,则可以省略分支名和远端名。
- gitpush将master分支推送到已关联的远端分支。
- 如果远程分支名和本地分支名称相同,则可以只写本地分支
如果已有仓库,但本地还没有此仓库代码,则可以克隆到本地
Git clone 仓库路径
拉取或抓取远程代码到本地
git fetch
git push
从远程仓库中抓取和拉取
远程分支和本地的分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。
- 抓取命令: git fetch [remote name] [branch name]
- 抓取指令就是将仓库里的更新都抓取到本地,不会进行合并。
- 如果不指定远端名称和分支名,则抓取所有分支。
- 拉取 命令:git pull [remote name] [branch name]
- 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge。
- 如果不指定远端名称和分支名,则抓取所有并更新当前分支。
在test01这个本地仓库进行一次提交并推送到远程仓库:
注意!!!
1,切换分支前先提交本地修改过的代码。
2,先查看现代码与原代码的区别,没问题后再推送。