git知识点黄金笔记

📚 第一部分:Git 核心概念与基础

这部分是 Git 的"地基",理解了它们,后续的操作才会有清晰的脉络。

  • 什么是 Git?

    Git 是目前最主流的分布式版本控制系统,由 Linus Torvalds 于2005年为管理 Linux 内核开发而创造。它的核心优势在于:

    • 分布式:每个开发者的本地都拥有完整的项目历史,不依赖中央服务器,可以离线工作。

    • 高效与安全:底层使用SHA-1哈希值来保证数据的完整性,操作速度快。

  • 四大工作区域

    Git 管理文件,主要通过以下四个区域流转:

    1. 工作区 (Workspace):你电脑上实际编辑代码的目录。

    2. 暂存区 (Index/Stage):一个临时的存储区域,存放你准备提交的修改。它是工作区和版本库之间的缓冲地带。

    3. 本地仓库 (Local Repository) :你电脑上 .git 文件夹,这里存储了项目所有提交记录和版本信息。

    4. 远程仓库 (Remote Repository):托管在服务器(如Gitee、GitHub)上的仓库,用于团队协作和备份。

  • 初次运行前的配置

    安装 Git 后,第一件事就是设置你的身份信息,这会记录在每一次提交里:

    bash

    复制代码
    git config --global user.name "你的用户名"
    git config --global user.email "你的邮箱"
    git config --list # 查看所有配置

🔧 第二部分:日常开发核心命令 (必会)

这套命令是每天开发都要用到的,构成了最基础的"增删改查"工作流。

分类 核心命令 功能说明 常用示例
仓库初始化 git init 在当前目录初始化一个新的 Git 仓库 git init
git clone <URL> 克隆一个远程仓库到本地 git clone https://gitee.com/xyoam/heart.git
文件操作 git status 查看当前工作区和暂存区的文件状态 git status / git status -s (精简模式)
git add <文件> 将工作区的改动添加到暂存区 git add . (添加所有) / git add *.js
git commit -m "说明" 将暂存区的快照提交到本地仓库,生成一个版本记录 git commit -m "feat: 添加登录功能"
查看信息 git log 查看当前分支的提交历史 git log --oneline --graph (图形化精简显示)
git diff 比较不同区域之间的代码差异 git diff (工作区 vs 暂存区)
远程协作 git remote -v 查看当前仓库关联的远程仓库地址 git remote add origin <URL> (添加远程仓库)
git push 将本地分支的提交推送到远程仓库 git push -u origin main (首次推送并关联)
git pull 从远程拉取最新代码并与当前分支合并 (fetch + merge) git pull origin main

🌿 第三部分:分支管理 (团队协作的精髓)

分支是 Git 最强大的特性,它让你可以并行开发,互不干扰。

  • 分支的本质与操作

    分支本质上是一个指向提交对象的可变指针 ,而 HEAD 指针则指向当前所在的分支。

操作 命令 说明
查看分支 git branch 查看本地分支列表,当前分支前有 * 标记
创建分支 git branch <分支名> 在当前提交上创建一个新指针
切换分支 git checkout <分支名> / git switch <分支名> switch 是 Git 2.23+ 推荐的新命令,语义更清晰
创建+切换 git checkout -b <分支名> / git switch -c <分支名> 日常最常用的快捷方式
删除分支 git branch -d <分支名> 删除已合并的分支;若未合并需用 -D 强制删除
合并分支 git merge <分支名> 将目标分支合并到当前分支
  • 合并的两种主要场景

    1. 快进合并 (Fast-forward) :当目标分支(如main)在分叉后没有新提交时,Git 只需将指针直接前移即可。这种模式不会创建新的合并提交。

    2. 三方合并 (Three-way Merge) :当两条分支都有新提交时,Git 会基于它们的共同祖先 进行合并,并创建一个新的合并提交来记录这次整合。

  • 解决合并冲突

    当不同分支修改了同一文件的同一区域时,Git 无法自动合并,产生冲突。解决步骤如下:

    1. 打开冲突文件,查找 <<<<<<< HEAD=======>>>>>>> [分支名] 标记。

    2. 手动编辑文件,保留需要的内容,并删除所有冲突标记。

    3. 保存文件,用 git add 将其标记为已解决。

    4. 执行 git commit 完成合并提交。

🚀 第四部分:高级操作 (进阶必备)

掌握这些操作,能让你更灵活地应对复杂场景。

  • git rebase (变基)

    merge 合并不同,rebase 会将当前分支的提交"复制"到目标分支的最新提交之后,从而创造出一条更线性的提交历史。

    • 重要原则不要对已经推送到公共仓库的提交执行 rebase,否则会给协作者带来灾难。
  • 撤销与改写历史

    • git commit --amend:修改最近一次提交的信息或补充漏掉的文件,不产生新的提交ID。

    • git reset:回退版本。--soft--mixed(默认)、--hard 三种模式对工作区和暂存区的影响不同。慎用 --hard,它会丢弃所有未提交的改动。

    • git revert <提交ID>:通过创建一个新提交来撤销某次历史提交的改动。这是一种安全的方式,因为它是"向前"走的,不会改写历史,适合用于公共分支。

  • git stash (储藏)

    当你需要紧急切换分支,但当前工作区还有未完成的修改时,用 git stash 可以将这些修改暂存起来,让你的工作区恢复干净。之后用 git stash pop 可以恢复这些修改。

  • git tag (标签)

    用于给项目在特定时间点(如版本发布时)打上标记,方便以后回溯。分为轻量标签和附注标签两种。

  • git reflog (引用日志)

    这是 Git 的"后悔药"。它会记录你在本地仓库的所有操作历史(包括已删除的提交)。当你误操作 reset 后,可以用 git reflog 找到丢失的提交ID并恢复。

🤝 第五部分:主流协作工作流

在团队中,需要根据项目特点选择合适的工作流模式。

工作流模式 核心特点 适用场景
Git Flow 分支类型严格,包括 masterdevelopfeature/release/hotfix/ 等。 大型项目,有严格的发布周期和版本管理要求。
GitHub / Gitee Flow 流程简单,只有一个长期分支 main。所有开发都在 feature/ 分支进行,完成后通过 Pull Request (PR) 进行代码审查和合并。 敏捷开发,持续部署,追求快速迭代的团队。
Forking Flow 每个开发者都拥有自己 Fork 的远程仓库,通过向主仓库发起 PR 来贡献代码。 开源项目,外部贡献者数量不固定。

💎 核心心法总结

  1. 养成随时 git status 的习惯:这是你了解当前仓库状态的"导航仪"。

  2. 小步提交,频繁推送:将每次提交限定为一个逻辑单元,并附上清晰说明。这不仅是好习惯,更是安全的保障。

  3. 公共分支历史禁改 :永远不要对已推送到公共仓库的 maindevelop 分支使用 git resetgit rebase

  4. 推送前先拉取 :开始工作前和推送代码前,先 git pull 同步最新代码,这是避免冲突的最佳方式。

相关推荐
----云烟----1 小时前
Git 提交忽略某些文件方法
git
天若有情6732 小时前
Node+MySQL小型全栈笔记项目实战课程分享
数据库·笔记·mysql
切糕师学AI4 小时前
如何查看已合并到 master 分支的所有分支?Git 分支清理指南
大数据·git·elasticsearch
suaizai_4 小时前
从1210条报错到全自动修复:AI闭环运维实战
大数据·elasticsearch·搜索引擎
摇滚侠5 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 JDBC 事务管理 阅读笔记 33
spring boot·笔记·后端
Wendy不吃榴莲5 小时前
# AI短剧教程 - 《后西游记》开播后,AI影视为什么更考验“连续讲故事”?
人工智能·笔记·学习·ai·视频
Agudamu11616 小时前
B站学习视频怎么变笔记:用 Ai好记 + Obsidian 搭建个人知识库的完整教程
人工智能·笔记·学习·音视频
疯狂打码的少年8 小时前
【数据库技术】SQL嵌套查询(IN/EXISTS/ANY/ALL)
数据库·笔记·sql
凯尔萨厮8 小时前
Java学习笔记十四(网络通信)
笔记·学习