Git自我学习笔记

文章目录

  • 1.git的基本操作
    • [1.1 初始化一个 Git 仓库](#1.1 初始化一个 Git 仓库)
    • [1.2 配置用户信息](#1.2 配置用户信息)
      • [1.2.1 配置默认编辑器](#1.2.1 配置默认编辑器)
      • [1.2.2 查看配置信息](#1.2.2 查看配置信息)
      • [1.2.3 配置SSH密钥(可选)](#1.2.3 配置SSH密钥(可选))
    • [1.3 添加文件到暂存区](#1.3 添加文件到暂存区)
    • [1.4 提交更改](#1.4 提交更改)
    • [1.5 查看提交历史](#1.5 查看提交历史)
    • [1.6 撤销操作](#1.6 撤销操作)
      • [1.6.1 撤销工作区修改](#1.6.1 撤销工作区修改)
      • [1.6.2 撤销暂存区修改](#1.6.2 撤销暂存区修改)
      • [1.6.3 修改最近一次提交](#1.6.3 修改最近一次提交)
    • 1.7文件比较
      • [1.7.1 比较工作区与暂存区](#1.7.1 比较工作区与暂存区)
      • [1.7.2 比较暂存区与最近提交](#1.7.2 比较暂存区与最近提交)
      • [1.7.3 比较两次提交](#1.7.3 比较两次提交)
    • [1.8 查看工作区状态](#1.8 查看工作区状态)
  • [2. Git 分支管理隔离不同功能的开发](#2. Git 分支管理隔离不同功能的开发)
    • [2.1 查看分支](#2.1 查看分支)
    • [2.2 创建分支](#2.2 创建分支)
    • [2.3 切换分支](#2.3 切换分支)
    • [2.4 创建并切换分支](#2.4 创建并切换分支)
    • [2.5 合并分支](#2.5 合并分支)
    • [2.5 删除分支](#2.5 删除分支)
    • [2.6 分支冲突](#2.6 分支冲突)
    • [2.7 分支管理策略](#2.7 分支管理策略)
      • [2.7.1 常用分支模型](#2.7.1 常用分支模型)
        • [2.7.1.1 Git Flow模型](#2.7.1.1 Git Flow模型)
        • [2.7.1.2 GitHub Flow模型](#2.7.1.2 GitHub Flow模型)
      • [2.7.2 分支命名规范](#2.7.2 分支命名规范)
    • [2.8 高级分支操作](#2.8 高级分支操作)
      • [2.8.1 重命名分支](#2.8.1 重命名分支)
      • [2.8.2 删除分支](#2.8.2 删除分支)
      • [2.8.3 查看分支历史](#2.8.3 查看分支历史)
  • [3. git 与远程仓库](#3. git 与远程仓库)
    • [3.1 远程仓库基本操作](#3.1 远程仓库基本操作)
      • [3.1.1 查看远程仓库](#3.1.1 查看远程仓库)
      • [3.1.2 添加远程仓库](#3.1.2 添加远程仓库)
      • [3.1.3 修改远程仓库URL](#3.1.3 修改远程仓库URL)
      • [3.1.4 删除远程仓库关联](#3.1.4 删除远程仓库关联)
    • [3.2 与远程仓库交互](#3.2 与远程仓库交互)
      • [3.2.1 推送本地分支到远程](#3.2.1 推送本地分支到远程)
      • [3.2.2 从远程拉取更新](#3.2.2 从远程拉取更新)
      • [3.2.3 获取远程更新但不合并](#3.2.3 获取远程更新但不合并)
    • [3.3 远程分支操作](#3.3 远程分支操作)
      • [3.3.1 跟踪远程分支](#3.3.1 跟踪远程分支)
      • [3.3.2 删除远程分支](#3.3.2 删除远程分支)
    • [3.4 克隆远程仓库](#3.4 克隆远程仓库)
  • 4.Github操作
    • [4.1 协作工作流](#4.1 协作工作流)
      • [4.1.1 集中式工作流](#4.1.1 集中式工作流)
      • [4.1.2 Forking工作流](#4.1.2 Forking工作流)
      • [4.1.3 Pull Request流程](#4.1.3 Pull Request流程)
    • [4.2 GitHub基本操作](#4.2 GitHub基本操作)
      • [4.2.1 创建仓库](#4.2.1 创建仓库)
      • [4.2.2 Fork仓库](#4.2.2 Fork仓库)
      • [4.2.3 克隆Fork的仓库](#4.2.3 克隆Fork的仓库)
      • [4.2.4 同步Fork仓库](#4.2.4 同步Fork仓库)
  • 5.学习资料

Workspace :工作区

Index / Stage :暂存区

Repository :仓库区(或本地仓库)

Remote:远程仓库

1.git的基本操作

cpp 复制代码
git init //把这个目录变成Git可以管理的仓库
git add README.md //文件添加到仓库
git add . //不但可以跟单一文件,还可以跟通配符,更可以跟目录。一个点就把当前目录下所有未追踪的文件全部add了 
git commit -m "first commit" //把文件提交到仓库
git remote add origin git@gitee.com:damaoyou/camera.git //关联远程仓库
git push -u origin master //把本地库的所有内容推送到远程库上

1.1 初始化一个 Git 仓库

要使用 git 进行版本控制,首先需要在项目目录中初始化一个 Git 仓库。使用 git init 命令:

cpp 复制代码
git init

此命令会在当前目录下创建一个 .git 文件夹,这个文件夹用于存储所有的版本控制信息。

1.2 配置用户信息

在首次使用 git 时,需要设置用户的名字和邮箱,这些信息将用于标识每次提交:

cpp 复制代码
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

1.2.1 配置默认编辑器

如果你想更改Git的默认编辑器,可以使用以下命令:

cpp 复制代码
 git config --global core.editor "code --wait"

(以上命令将VS Code设置为默认编辑器)

1.2.2 查看配置信息

要查看当前的Git配置,可以使用:

cpp 复制代码
 git config --list

1.2.3 配置SSH密钥(可选)

如果需要连接GitHub等远程仓库,建议配置SSH密钥以避免每次输入密码:

1. 打开Git Bash

2. 输入以下命令生成SSH密钥:

cpp 复制代码
 ssh-keygen -t ed25519 -C "你的邮箱地址"

3. 按Enter键,接受默认保存位置和空密码

4. 将公钥添加到SSH代理:

cpp 复制代码
 eval "$(ssh-agent -s)"
 ssh-add ~/.ssh/id_ed25519

5. 复制公钥内容以便添加到GitHub:

cpp 复制代码
 cat ~/.ssh/id_ed25519.pub

1.3 添加文件到暂存区

在 git 中,文件有三个状态:工作区(working directory)、暂存区(staging area)、版本库(repository)。当我们修改文件后,需要将其添加到暂存区,才能进行提交。使用 git add 命令:

cpp 复制代码
git add <filename>      # 添加单个文件
git add .               # 添加当前目录下的所有文件

1.4 提交更改

在将文件添加到暂存区后,使用 git commit 命令提交更改。每次提交时,都需要提供提交信息,用于描述此次提交的内容:

cpp 复制代码
git commit -m "Your commit message"

提交后,文件的更改会被记录到本地仓库中。

1.5 查看提交历史

查看项目的提交历史,可以使用 git log 命令:

cpp 复制代码
 # 基本提交历史
 git log

 # 简洁格式显示
 git log --oneline

 # 图形化显示分支历史
 git log --graph --oneline --all

 # 显示最近n次提交
 git log -n 3

这将显示所有提交的历史记录,包括每次提交的哈希值、提交者信息、时间戳和提交信息。

1.6 撤销操作

1.6.1 撤销工作区修改

放弃对工作区文件的修改(恢复到最近一次提交状态):

cpp 复制代码
 git checkout -- <文件名>
 # 示例:git checkout -- index.html

1.6.2 撤销暂存区修改

将文件从暂存区移回工作区:

cpp 复制代码
 git reset HEAD <文件名>
 # 示例:git reset HEAD index.html

1.6.3 修改最近一次提交

如果需要修改最近一次提交(尚未推送到远程仓库):

bash 复制代码
 git commit --amend -m "新的提交说明"

1.7文件比较

1.7.1 比较工作区与暂存区

查看工作区文件与暂存区的差异:

bash 复制代码
 git diff <文件名>
 # 示例:git diff index.html

1.7.2 比较暂存区与最近提交

查看暂存区与最近一次提交的差异:

bash 复制代码
 git diff --staged <文件名>

1.7.3 比较两次提交

比较两个提交版本之间的差异:

bash 复制代码
 git diff <commit1> <commit2>
 # 示例:git diff a1b2c3d e4f5g6h

1.8 查看工作区状态

要查看工作区和暂存区的状态,可以使用 git status 命令。

该命令会显示哪些文件被修改了,哪些文件已经准备好提交,哪些文件还没有被添加到暂存区:

cpp 复制代码
git status

2. Git 分支管理隔离不同功能的开发

分支是Git中最重要的功能之一,它允许你在独立的开发线上工作,不会影响主代码库。

分支可以让你同时开发多个功能或修复多个bug,最后再将这些更改合并到主分支。

1.允许并行开发

2.保护主分支代码稳定性

3.方便进行代码审查

4.可以随时回滚到稳定版本

2.1 查看分支

列出所有本地分支:

cpp 复制代码
 git branch

当前分支会以*标记。

列出所有本地和远程分支:

cpp 复制代码
 git branch -a

2.2 创建分支

在开发中,分支是 git 的一个核心特性。通过分支,开发者可以在不同的工作流中并行开发,避免彼此干扰。

要创建一个新分支,可以使用以下命令:

cpp 复制代码
git branch <branch-name>
# 示例:git branch feature/login

例如,创建一个名为 feature 的分支:

cpp 复制代码
git branch feature

2.3 切换分支

切换到已创建的分支,使用 git checkout 命令:

cpp 复制代码
 # Git 2.23之前版本
 git checkout <分支名>
 # 示例:git checkout feature/login

 # Git 2.23及以上版本(推荐)
 git switch <分支名>
 # 示例:git switch feature/login

2.4 创建并切换分支

一步创建并切换到新分支:

cpp 复制代码
 # Git 2.23之前版本
 git checkout -b <分支名>
 # 示例:git checkout -b feature/payment

 # Git 2.23及以上版本(推荐)
 git switch -c <分支名>
 # 示例:git switch -c feature/payment

2.5 合并分支

当某个分支的开发完成后,通常需要将该分支的代码合并到主分支(如 master)。使用 git merge 命令:

cpp 复制代码
git checkout master   # 切换到主分支
git merge feature     # 合并 feature 分支

2.5 删除分支

如果分支已经完成并且不再需要,可以使用 git branch -d 删除该分支:

cpp 复制代码
git branch -d feature

2.6 分支冲突

在合并分支时,如果两者修改了相同的代码行,git 会提示出现冲突,开发者需要手动解决冲突。解决冲突后,再次提交合并结果。

当Git无法自动合并更改时,会产生冲突。冲突文件中会标记冲突区域,格式如下:

复制代码
 <<<<<<< HEAD
 当前分支的代码
 =======
 待合并分支的代码
 >>>>>>> feature/login

解决冲突步骤:

  1. 打开冲突文件,查找并编辑冲突区域
  2. 保留正确的代码,删除冲突标记(<<<<<<, =======, >>>>>>)
  3. 保存文件后,添加到暂存区 git add <冲突文件>
  4. 完成合并提交 git commit -m "解决合并冲突"

2.7 分支管理策略

2.7.1 常用分支模型

2.7.1.1 Git Flow模型
  • main/master: 主分支,保持随时可部署状态
  • develop: 开发分支,包含下一个版本的功能
  • **feature/*: 功能分支,从develop创建,完成后合并回develop
  • **release/*: 发布分支,从develop创建,测试通过后合并到main和develop
  • **hotfix/*: 紧急修复分支,从main创建,修复后合并到main和develop
2.7.1.2 GitHub Flow模型
  • 简化版分支策略,只有main分支
  • 所有功能开发在feature分支进行
  • 完成后通过Pull Request合并回main

2.7.2 分支命名规范

  • 使用有意义的名称
  • 功能分支以feature/开头
  • 修复分支以bugfix/开头
  • 发布分支以release/开头
  • 紧急修复以hotfix/开头
  • 示例:feature/user-authentication, bugfix/login-error

2.8 高级分支操作

2.8.1 重命名分支

cpp 复制代码
 git branch -m <旧分支名> <新分支名>
 # 示例:git branch -m feature/old-name feature/new-name

2.8.2 删除分支

删除已合并的本地分支:

bash 复制代码
 git branch -d <分支名>
 # 示例:git branch -d feature/login

强制删除未合并的分支(谨慎使用):

bash 复制代码
 git branch -D <分支名>
 # 示例:git branch -D experimental-feature

2.8.3 查看分支历史

bash 复制代码
 git log --oneline --graph --all

3. git 与远程仓库

远程仓库是托管在网络上的Git仓库,用于团队协作和代码备份。常见的远程仓库托管服务包括GitHub、GitLab、Gitee等。

3.1 远程仓库基本操作

3.1.1 查看远程仓库

查看当前项目配置的远程仓库:

cpp 复制代码
 git remote
 # 显示远程仓库名称,通常为origin

 git remote -v
 # 显示远程仓库详细信息,包括fetch和push的URL

3.1.2 添加远程仓库

将本地仓库关联到远程仓库:

cpp 复制代码
 git remote add <远程仓库名称> <仓库URL>
 # 示例:git remote add origin https://github.com/yourusername/git-tutorial.git

通常约定将主要远程仓库命名为origin

3.1.3 修改远程仓库URL

当远程仓库地址变更时,可以修改关联的URL:

cpp 复制代码
 git remote set-url <远程仓库名称> <新URL>
 # 示例:git remote set-url origin https://github.com/yourusername/new-repo.git

3.1.4 删除远程仓库关联

移除与远程仓库的关联:

cpp 复制代码
 git remote remove <远程仓库名称>
 # 示例:git remote remove origin

3.2 与远程仓库交互

3.2.1 推送本地分支到远程

将本地分支推送到远程仓库:

cpp 复制代码
 # 基本推送命令
 git push <远程仓库名称> <本地分支名>
 # 示例:git push origin main

 # 设置上游分支(首次推送时)
 git push -u <远程仓库名称> <本地分支名>
 # 示例:git push -u origin main
 # 设置后,后续可直接使用 git push

3.2.2 从远程拉取更新

获取远程仓库的更新并合并到本地分支:

cpp 复制代码
 # 拉取并合并(推荐)
 git pull <远程仓库名称> <远程分支名>
 # 示例:git pull origin main

 # 等价于 git fetch + git merge
 git fetch <远程仓库名称>
 git merge <远程仓库名称>/<远程分支名>

3.2.3 获取远程更新但不合并

只获取远程仓库的更新信息,不自动合并到本地分支:

cpp 复制代码
 git fetch <远程仓库名称>
 # 示例:git fetch origin

 # 查看远程分支信息
 git branch -r

 # 查看远程分支与本地分支差异
 git diff <本地分支名> <远程仓库名称>/<远程分支名>

3.3 远程分支操作

3.3.1 跟踪远程分支

创建本地分支跟踪远程分支:

cpp 复制代码
 git checkout --track <远程仓库名称>/<远程分支名>
 # 示例:git checkout --track origin/feature/new-ui

 # 或使用switch命令(Git 2.23+)
 git switch -c <本地分支名> <远程仓库名称>/<远程分支名>
 # 示例:git switch -c feature/new-ui origin/feature/new-ui

3.3.2 删除远程分支

删除远程仓库上的分支:

cpp 复制代码
 git push <远程仓库名称> --delete <远程分支名>
 # 示例:git push origin --delete feature/old-feature

3.4 克隆远程仓库

如果你要协作开发,可以从远程仓库克隆项目到本地。

使用 git clone 命令:

cpp 复制代码
git clone <repository-url>

例如,克隆 GitHub 上的某个项目:

cpp 复制代码
git clone https://github.com/username/repository.git

4.Github操作

4.1 协作工作流

4.1.1 集中式工作流

  • 团队共享一个中央仓库
  • 所有开发者从中央仓库拉取和推送代码
  • 适合小型团队或初学者

4.1.2 Forking工作流

  • 从原始仓库创建个人副本(fork)
  • 在个人仓库上进行开发
  • 通过Pull Request向原始仓库提交更改
  • 适合开源项目或外部贡献者

4.1.3 Pull Request流程

  1. 在个人仓库中推送分支到远程
  2. 在GitHub/GitLab界面创建Pull Request
  3. 指定审核者进行代码审查
  4. 解决审查意见和冲突
  5. 审查通过后合并到目标分支

4.2 GitHub基本操作

4.2.1 创建仓库

  1. 登录GitHub账号
  2. 点击右上角"New repository"
  3. 填写仓库名称、描述,选择公开或私有
  4. 勾选"Initialize this repository with a README"
  5. 点击"Create repository"

4.2.2 Fork仓库

  1. 访问目标仓库页面
  2. 点击右上角"Fork"按钮
  3. 等待几秒钟,浏览器会跳转到你的个人仓库下的副本

4.2.3 克隆Fork的仓库

bash 复制代码
 git clone https://github.com/yourusername/forked-repo.git
 cd forked-repo

4.2.4 同步Fork仓库

保持个人Fork与原始仓库同步:

bash 复制代码
 # 添加原始仓库为上游
 git remote add upstream https://github.com/originalowner/original-repo.git

 # 获取上游更新
 git fetch upstream

 # 合并到本地主分支
 git checkout main
 git merge upstream/main

 # 推送到个人远程仓库
 git push origin main

5.学习资料

1.菜鸟教程

2.Git 使用教程:最详细、最正宗手把手教学(万字长文)

3.Labex在线学习git

4.Git 入门指南:初学者的权威实践手册

5.高质量的git中文教程

6.git可视化教程网站

7.git图文教程

8.Git 教程:从0到1全面指南教程

9.git教程

相关推荐
江米小枣tonylua37 分钟前
从神州22极限救援,看懂Git高级玩法
git
玖日大大37 分钟前
基于 Hugging Face Transformers 搭建情感分析模型:从原理到实战
人工智能·学习
森林小狗2 小时前
0基础快速入门SEO笔记
笔记
其美杰布-富贵-李2 小时前
SpaceClaim 流体域建模学习笔记
笔记·学习
遇到困难睡大觉哈哈10 小时前
Harmony os——ArkTS 语言笔记(四):类、对象、接口和抽象类
java·笔记·spring·harmonyos·鸿蒙
程序员东岸10 小时前
《数据结构——排序(中)》选择与交换的艺术:从直接选择到堆排序的性能跃迁
数据结构·笔记·算法·leetcode·排序算法
Violet_YSWY11 小时前
git stash和backup一样吗
git
STLearner11 小时前
AI论文速读 | U-Cast:学习高维时间序列预测的层次结构
大数据·论文阅读·人工智能·深度学习·学习·机器学习·数据挖掘
Ccjf酷儿11 小时前
操作系统 蒋炎岩 4.数学视角的操作系统
笔记