文章目录
- 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
解决冲突步骤:
- 打开冲突文件,查找并编辑冲突区域
- 保留正确的代码,删除冲突标记(<<<<<<, =======, >>>>>>)
- 保存文件后,添加到暂存区
git add <冲突文件> - 完成合并提交
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流程
- 在个人仓库中推送分支到远程
- 在GitHub/GitLab界面创建Pull Request
- 指定审核者进行代码审查
- 解决审查意见和冲突
- 审查通过后合并到目标分支
4.2 GitHub基本操作
4.2.1 创建仓库
- 登录GitHub账号
- 点击右上角"New repository"
- 填写仓库名称、描述,选择公开或私有
- 勾选"Initialize this repository with a README"
- 点击"Create repository"
4.2.2 Fork仓库
- 访问目标仓库页面
- 点击右上角"Fork"按钮
- 等待几秒钟,浏览器会跳转到你的个人仓库下的副本
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.菜鸟教程
7.git图文教程
9.git教程