目录
-
-
- 核心概念简述
- [1. git init - 初始化新仓库](#1. git init - 初始化新仓库)
- [2. git clone - 克隆远程仓库](#2. git clone - 克隆远程仓库)
- [3. git push - 推送本地提交](#3. git push - 推送本地提交)
- [4. git pull - 拉取并合并更新](#4. git pull - 拉取并合并更新)
- [5. git fetch - 获取远程更新](#5. git fetch - 获取远程更新)
- [6. 切换分支](#6. 切换分支)
- [7. git merge - 合并分支](#7. git merge - 合并分支)
- 总结与工作流图示
-
核心概念简述
- 工作区 (Working Directory):你直接编辑文件的目录。
- 暂存区 (Staging Area / Index)**:一个准备下次提交的文件列表。
- 本地仓库 (Local Repository) :存储项目所有版本记录和数据的地方 (在
.git目录中)。 - 远程仓库 (Remote Repository):托管在服务器上(如 GitHub, GitLab)的仓库,用于团队协作。
1. git init - 初始化新仓库
作用 :将一个普通目录转变为 Git 仓库,创建一个 .git 子目录来跟踪管理。
用法:
bash
# 在当前目录初始化
git init
# 在新目录中初始化
git init <项目目录名>
场景:当你开始一个新项目,并想用 Git 管理它的版本时。
2. git clone - 克隆远程仓库
作用 :将远程仓库的完整副本 下载到本地,并自动设置好远程跟踪分支(通常是 origin)。
用法:
bash
# 基本克隆
git clone <远程仓库URL>
# 克隆到指定目录
git clone <远程仓库URL> <本地目录名>
示例:
bash
git clone https://github.com/username/my-project.git
cd my-project # 自动进入项目目录
场景:获取一份已存在于服务器(如 GitHub)上的代码,开始你的工作。
3. git push - 推送本地提交
作用:将本地仓库的提交上传到远程仓库,与他人分享你的代码。
用法:
bash
# 首次推送,建立上游跟踪关系
git push -u origin <分支名>
# 之后的标准推送 (在已建立跟踪关系后)
git push
示例:
bash
# 你完成了本地开发,并提交了代码,现在要推送到 GitHub
git add .
git commit -m "添加了新功能"
git push -u origin main # 第一次推送 main 分支
# 以后在这个分支上,直接 `git push` 即可
场景:当你完成了本地功能的开发或修复,并希望将代码更新到共享的远程仓库时。
4. git pull - 拉取并合并更新
作用 :从远程仓库获取最新版本并立即合并 到当前分支。它是 git fetch(获取) 和 git merge(合并) 两个操作的组合。
用法:
bash
git pull
# 等同于
git fetch
git merge origin/<当前分支名>
场景 :开始工作前,确保你的本地分支与远程仓库同步。注意:如果远程的更新与你的本地修改有冲突,你需要解决这些冲突。
5. git fetch - 获取远程更新
作用 :从远程仓库下载最新的提交、分支和标签等信息到你的本地仓库,但不会自动合并到你的工作区。
用法:
bash
# 获取所有远程仓库的更新
git fetch
# 获取特定远程仓库的更新
git fetch origin
与 git pull 的区别:
git fetch:更安全。它只"查看"远程有什么更新,让你有机会在合并前审查更改(例如,使用git log origin/main)。git pull:更直接。它直接"下载并合并",可能会产生你未预料到的冲突。
场景:你想看看队友是否推送了新代码,但又不想立即合并到你的工作文件中。
6. 切换分支
作用:在不同的开发线(分支)之间切换。
用法:
bash
# 切换到已存在的分支
git checkout <分支名>
# 或者使用更新的 switch 命令 (Git 2.23+)
git switch <分支名>
# 创建并切换到新分支
git checkout -b <新分支名>
git switch -c <新分支名> # 新命令
示例:
bash
# 从 main 分支创建一个开发新功能的分支
git switch -c feature/login
# ... 进行一些开发 ...
git add .
git commit -m "完成登录界面"
# 切换回 main 分支
git switch main
场景:需要在不影响主分支的情况下开发新功能或修复 Bug。
7. git merge - 合并分支
作用:将一个分支的修改整合到当前分支。
用法:
- 首先,切换到你要接收更改的分支(通常是主分支)。
- 然后,执行 merge 命令,指定要合并过来的源分支。
bash
git checkout main # 切换到目标分支
git merge feature/login # 将 feature/login 分支合并到 main
合并结果:
- 快进合并 (Fast-forward):如果目标分支没有新的提交,Git 只需要将指针向前移动。这是最简单的情况。
- 三方合并 (3-way merge):如果两个分支都有新的提交,Git 会创建一个新的"合并提交"来连接它们。
- 冲突 (Conflict):如果两个分支修改了同一文件的同一区域,Git 无法自动合并,会标记为冲突,需要你手动解决。
解决冲突:
- Git 会在冲突文件中标记出冲突部分(
<<<<<<<,=======,>>>>>>>)。 - 你手动编辑文件,选择保留哪一方的代码,或进行整合。
- 删除标记符号后,执行
git add <冲突文件>将解决后的文件标记为已解决。 - 最后执行
git commit来完成合并提交。
场景:当你完成了一个功能的开发,并希望将它集成到主分支时。
总结与工作流图示
一个典型的协作工作流:
bash
# 1. 获取代码
git clone https://github.com/company/project.git
cd project
# 2. 基于主分支创建功能分支
git switch -c my-feature
# 3. 进行开发,多次提交
git add .
git commit -m "完成第一步"
# ... 更多开发 ...
# 4. 在推送前,先拉取最新的 main 分支,确保兼容性
git switch main
git pull origin main
# 5. 回到功能分支,合并最新的 main(解决可能的冲突)
git switch my-feature
git merge main
# 6. 推送功能分支到远程
git push -u origin my-feature
# 7. 在 GitLab/GitHub 上创建 Pull/Merge Request 请求合并到 main
# 8. 同事审查后,在界面上完成合并