GIT的使用

一、git是什么

Git 是目前最流行的分布式版本控制系统 ,用来记录文件的变化、协调多人协作,最初是为了管理 Linux 内核开发而创建的。

可以把它理解成一个强大的"存档+时光机"系统:

  • 存档:项目每次有意义的变化,比如完成一个新功能,都可以存为一个"快照"。

  • 时光机:任何时候都可以回退到过去某个版本,或查看某个文件的修改历史。

  • 多人协作:在不干扰别人的情况下并行开发,最后再优雅地合并成果。

为了理解它,需要知道这几个核心概念:

  • 仓库 :一个项目文件夹,所有的历史记录都保存在其中的一个隐藏文件夹 .git 里。

  • 工作区、暂存区、仓库 :Git 的工作分为三块区域。你在工作区 改文件,把想保存的改动加入暂存区 ,最后确认提交,保存到仓库成为永久历史。这让你能精细控制每次提交的内容。

  • 提交:一次提交就是项目的一个快照。Git 鼓励"小步快跑",每次完成一个小功能就提交一次。

  • 分支:这是 Git 的精髓。你可以在自己的分支上大胆试验,完全不影响主分支。完成后,再通过"合并"把成果合入。分支的创建和切换速度极快。

Git是一个免费并且开源的分布式版本控制系统,能够高效的处理从小型到大型项目的版本管理,以及提供有效的团队管理工具。

二、git的工作原理

  • 工作区:你电脑里能看到的项目文件夹,改代码在这里。

  • 暂存区:一个"购物车",选择哪些修改要放到下一次提交里。

  • 本地仓库 :存放所有历史版本的地方,就在项目根目录隐藏的 .git 文件夹里。

  • 远程仓库:GitHub/GitLab 上的版本,用来协作和备份。

文件在 Git 眼里只有两种状态:

  • 未跟踪:新文件,Git 还不认识。

  • 已跟踪:Git 已经在管的文件,又分为未修改、已修改、已暂存三种。

三、git的分支示意图

主要流程:新建一个项目后自动新建了mian/master分支,这个时候我们新建一个develop分支用来作为主开发的分支,然后不同小组新建各自的feature分支来开发各自的功能,开发完后向develop主开发分支提交合并请求,develop分支对其进行验证,找不到bug后新建一个release分支作为测试服,在进行长时间验证,发现错误就打回develop进行修复,发现很稳定后就向主项目main/master合并,并生成版本号。

  • main/master 分支是项目的核心分支,只接受hotfixes(热修复,紧急修复 )和release(预发布版本)的分支合并 ,通常具有版本号,可以称为正式版
  • release 分支是develop分支拿来验证的分支,就是所谓的测试版
  • develop 分支是开发分支,也是长期存在的核心分支,主要功能是收集各种feature分支,对他们进行测试和验证
  • feature 分支是各种新功能的开发分支,可以同时开很多条分支,同时开发减少时间成本
  • 版本号的说明:
    1.主版本:主要功能变化或者重大更新
    2.次版本:添加一些新功能,改进旧功能
    3.小版本:修复一些bug,打一些补丁

四、配置你的身份

在使用 Git 之前,必须先告诉它"你是谁"。这套配置在这台电脑上做一次就行

设置名字

bash 复制代码
git config --global user.name "你的名字"

设置邮箱

bash 复制代码
git config --global user.email "你的邮箱@example.com"

检查是否设置成功

bash 复制代码
git config --global --list

--global 表示对这台电脑上所有仓库都生效。如果只想在当前项目单独设置,把 --global 去掉就行。

输出:

五、本地使用git

先创建一个项目文件夹叫my-project

1、初始化仓库

告诉 Git 开始管理这个文件夹

bash 复制代码
cd my-project
git init

这会创建一个.git隐藏文件夹,你的所有版本历史都在里面。

输出

2、查看状态

bash 复制代码
git status

它会告诉你:有什么新文件、改了哪些东西、下一步可以做什么

输出:

3、开始第一次提交

第一步:添加到暂存区

bash 复制代码
# 添加指定文件
git add index.html

# 或一次添加所有修改过和新建的文件(常用)
git add .

输出:

第二步:提交到本地仓库

bash 复制代码
git commit -m "初始化项目,完成首页骨架"

第三步:查看提交历史

bash 复制代码
git log

输出:

到此为止,你已经完成了从零到第一次提交的全部过程。回过头看,其实就是六个命令:git initgit addgit commit ,中间夹着git statusgit log 看状态。

六、推送到GitHub

准备工作:在 GitHub 上创建一个空仓库

  1. 打开 https://github.com,登录你的账号。

  2. 点击右上角的 "+""New repository"

  3. Repository name 填 my-first-project

  4. 什么都不要勾选,特别是"Initialize this repository with a README"一定不要打勾。

  5. 点击绿色的 "Create repository" 按钮。

  6. 你会看到一个页面,上面有三条横杠。复制第一个框里那两条命令,大致长这样:

bash 复制代码
git remote add origin https://github.com/你的用户名/my-first-project.git
git branch -M main

把它原样复制到你的终端里,回车执行。

接着执行推送命令:

bash 复制代码
git push -u origin main

以后再修改代码,想同步到 GitHub,走这个极简流程就行:

bash 复制代码
git add .
git commit -m "改了点什么"
git push

七、多人协作的核心循环

1、假设现在你的代码已经被修改了,也就是别人在GitHub上先推了代码

2、现在你本地是旧版本,如果想继续工作,第一件事就是先拉取:

bash 复制代码
git pull origin main

你会看到类似 Fast-forward 这样的提示,说明拉取成功,此时再打开电脑查看代码就可以看见被修改了

这个动作是每天开工前的第一件事,能避免后面大量的冲突。

3、假设你在本地改了代码,别人在网页上改了同时提交时选了"Commit directly to the main branch",这时候如果直接推git push origin main会出错误

不能推,因为别人在你之后更新了,先去看看他改了啥

4、解决冲突

根据提示,先拉取

bash 复制代码
git pull origin main

拉取的时候,Git 会自动尝试合并。如果运气好,改的是不同行 ,就自动合并成功

如果改了同一行 ,所以它会直接报冲突

4.1、先打开本地文件

文件里面:

4.2、手动修改,决定最终留什么

4.3、告知 Git,冲突已解决

保存文件后,像平时一样提交:

bash 复制代码
git add xxx.xxx
git commit -m "解决了和同事的文案冲突"

4.4、最后再次推送

bash 复制代码
git push origin main

八、分支管理

分支让你在不影响主线的前提下,去尝试新功能。

场景:你想在网页里加一个标题,但不确定好不好。

1. 创建一个新分支,并切换过去

bash 复制代码
git switch -c add-title

2. 在这个分支上修改文件

3. 提交这次修改

bash 复制代码
git add index.html
git commit -m "添加了标题标签"

4. 切回主分支,看看效果

bash 复制代码
git switch main

5. 合并分支(功能做完了,决定合入主线)

bash 复制代码
git merge add-title

这个命令会把 add-title 分支的成果,合并 到你当前所在的main 分支。再打开 index.html,标题又出现了。

6. 清理不需要的分支

bash 复制代码
git branch -d add-title

任务完成,分支可以删掉了。

九、后悔药

场景 命令
改乱了工作区,想回到上次提交的状态 git restore 文件名
把文件加到了暂存区,想撤回 git restore --staged 文件名
提交信息写错了,想改 git commit --amend
刚提交完,想把漏掉的文件补进去 git add 漏掉的文件 + git commit --amend --no-edit
想看看某个文件的历史 git log -p 文件名
想回到过去看看某个版本 git switch 提交号
想彻底取消最近一次提交,回到之前 git reset --hard HEAD~1
工作做一半要切分支,但又不想提交 git stash / git stash pop
相关推荐
w3296362711 小时前
使用 OpenCode 在 Windows 上加速安装 Playwright 的完整指南
windows·git
我家媳妇儿萌哒哒19 小时前
git:无法推送refs到远端。您可以试着运行“拉取”功能,整合您的更改。
git
驯龙高手_追风1 天前
Gitlab本地服务器搭建及配置-详细教程
git·github
czhc11400756631 天前
6.11:halcon,Sqlserver;项目sql连接;git
git·sql·sqlserver
炸炸鱼.1 天前
Git+Jenkins 基本使用:从入门到实战(知识点大全)
运维·git·jenkins
戴国进1 天前
git stash 用法详解
git
木雷双雄71 天前
Git 版本回退操作指南
git
m0_579146652 天前
已被 Git 追踪的本地修改文件如何实现临时忽略
git
糖少主2 天前
WSL中使用Beyond Compare 3/4/5作为difftool
git·wsl·beyond compare·difftool