目录
3. 版本库(Repository / Git Directory)
常用命令速查
命令 | 作用 |
---|---|
git -v | 查看 git 版本 |
git init | 初始化 git 仓库 |
git add 文件标识 | 暂存某个文件 |
git add . | 暂存所有文件 |
git commit -m '说明注释' | 提交产生版本记录 |
git status | 查看文件状态 - 详细信息 |
git status -s | 查看文件状态 - 简略信息 |
git ls-files | 查看暂存区文件列表 |
git restore 文件标识 | 从暂存区恢复到工作区 |
git rm --cached 文件标识 | 从暂存区移除文件 |
git log | 查看提交记录 - 详细信息 |
git log --oneline | 查看提交记录 - 简略信息 |
git reflog --oneline | 查看完整历史 - 简略消息 |
git reset 版本号 | 切换版本代码到暂存区和工作区 |
git branch 分支名 | 创建分支 |
git branch | 查看本地分支 |
git branch -d 分支名 | 删除分支 |
git checkout 分支名 | 切换分支 |
git checkout -b 分支名 | 创建并立刻切换分支 |
git merge 分支名 | 把分支提交历史记录合并到当前所在分支 |
命令 | 作用 |
---|---|
git remote add 远程仓库别名 远程仓库地址 | 添加远程仓库地址 |
git remote -v | 查看远程仓库地址 |
git remote remove 远程仓库别名 | 删除远程仓库地址 |
git pull 远程仓库别名 分支名 | 拉取 |
git push 远程仓库别名 分支名 | 推送 |
git pull --rebase 远程仓库别名 分支名 | 拉取合并 |
git clone 远程仓库地址 | 克隆 |
一、Git 的概念与作用
Git 是一个分布式版本控制系统,用于跟踪和管理文件(尤其是代码)的修改历史。
核心作用:
-
版本控制:记录每次修改的差异,支持回退到任意历史版本。
-
协作开发:多人并行开发,合并代码变更。
-
分支管理:支持多分支独立开发(如新功能、Bug 修复)。
-
备份与恢复:本地和远程仓库双重备份,防止代码丢失。
检验下载成功:
1.打开 bash 终端(git 专用)
2.命令:git -v(查看版本号)
配置:用户名和邮箱,应用在每次提交代码版本时表明自己身份
命令:
git config --global user.name "name"
git config --global user.email "@email"
二、Git 仓库(Repository)
仓库是 Git 管理项目的核心单元,分为两类:
1. 本地仓库
-
存储在开发者本地计算机中,包含完整的项目历史记录。
-
初始化命令:
git init
(创建新仓库)或git clone
(克隆远程仓库)。git init # 将当前目录初始化为 Git 仓库 git clone 远程仓库地址 # 克隆远程仓库
2. 远程仓库
-
托管在远程服务器(如 GitHub、GitLab、Gitee),用于多人协作和代码共享。
-
常用命令:
git remote add origin <远程仓库地址> # 关联远程仓库 git push origin main # 推送代码到远程仓库 git pull origin main # 从远程仓库拉取最新代码
三、Git 的三个核心区域
- 工作区:实际开发时操作的文件夹
- 暂存区:保存之前的准备区域(暂存改动过的文件)
- 版本库:提交并保存暂存区中的内容,产生一个版本快照
命令 | 作用 |
---|---|
git add 文件名 | 暂存指定文件 |
git add . | 暂存所有改动的文件 |
git commit -m "注释说明" | 提交并保存,产生版本快照 |
Git 通过三个逻辑区域管理文件的修改和提交流程:
1. 工作区(Working Directory)
-
作用:用户直接编辑文件的目录(即项目文件夹)。
-
特点:所有未提交的修改都存在于工作区。
-
常用命令:直接修改文件(如
vim file.txt
)。
2. 暂存区(Staging Area / Index)
-
作用:临时存放准备提交的修改,允许选择性提交部分文件。
-
常用命令:
git add file.txt # 将文件的修改添加到暂存区 git add . # 添加所有修改到暂存区 git reset HEAD # 撤销暂存区的修改(回退到工作区)
3. 版本库(Repository / Git Directory)
-
作用:保存项目的所有提交历史(即
.git
目录)。 -
常用命令:
git commit -m "提交说明" # 将暂存区的修改提交到版本库 git log # 查看提交历史 git checkout <commit-id> # 切换到指定提交状态
三区关系流程图:
工作区 → git add → 暂存区 → git commit → 版本库
暂存区作用:
暂存区:暂时存储,可以临时恢复代码内容,与版本库解耦
暂存区覆盖工作区的命令:git restore 目标文件(注意:完全确认覆盖时使用)
从暂存区移除文件的命令:git rm --cached 目标文件
四、文件的四种状态
在 Git 中,文件可能处于以下四种状态:
1. 未跟踪(Untracked)
-
含义:文件未被 Git 管理(未执行过
git add
)。 -
典型场景:新创建的文件。
-
转换命令:
git add <file>
→ 文件变为 已暂存(Staged)。
2. 已修改(Modified)
-
含义:文件已被 Git 跟踪,但修改未添加到暂存区。
-
典型场景:修改了已存在的文件但未执行
git add
。 -
转换命令:
git add <file>
→ 文件变为 已暂存(Staged)。
3. 已暂存(Staged)
-
含义:文件的修改已添加到暂存区,等待提交。
-
典型场景:执行
git add
但未执行git commit
。 -
转换命令:
-
git commit
→ 提交到版本库,变为 未修改(Unmodified)。 -
git reset HEAD <file>
→ 回退到 已修改(Modified)。
-
4. 未修改(Unmodified)
-
含义:文件内容与版本库中的最新提交一致。
-
典型场景:文件未发生修改,或修改已提交到版本库。
-
转换命令:修改文件 → 变为 已修改(Modified)。
五、切换版本
概念:把版本库某个版本对应的内容快照,恢复到工作区/暂存区。
回退命令:
# 回退到指定提交,覆盖工作区和暂存区(--hard)
git reset --hard <commit-hash>
# 回退到指定提交,保留工作区和暂存区修改(--soft)
git reset --soft <commit-hash>
# 回退到指定提交,保留工作区修改(--mixed)
git reset --mixed <commit-hash>
- 只有记录在版本库的提交记录才能恢复
- 回退后,继续修改->暂存->提交操作即可
查看提交历史:
# 简洁版提交历史(只显示提交哈希和说明)
git log --oneline
# 查看所有操作记录(包括已删除的提交)
git reflog --oneline
六、分支(Branch)
1. 分支的概念
分支是 Git 的核心功能,允许开发者在不同的代码线上独立工作。每个分支代表一个独立的开发路径,互不影响。
-
默认分支:通常为
main
或master
,用于存放稳定代码。 -
功能分支:如
feature-login
,用于开发新功能。 -
修复分支:如
hotfix-bug
,用于紧急修复问题。
分支的作用:
-
隔离开发环境,避免不同任务互相干扰。
-
支持多人协作,并行推进多个任务。
-
便于版本回退和代码审查。
2. 分支的创建与删除
1. 创建分支
git branch feature-login # 创建名为 feature-login 的分支
2. 切换分支
git checkout feature-login # 切换到 feature-login 分支
git checkout -b feature-login # 创建并切换到新分支(推荐)
3. 查看分支
git branch # 查看本地分支(当前分支前有 * 号)
git branch -a # 查看所有分支(本地 + 远程)
4. 删除分支
git branch -d feature-login # 删除已合并的分支(安全)
git branch -D feature-login # 强制删除未合并的分支(慎用)
5. 推送分支到远程仓库
git push origin feature-login # 将本地分支推送到远程
3. 分支合并
git checkout master # 切换到目标分支
git merge content # 合并 content 到 main
git branch -d content # 删除合并后的分支
- 若目标分支(如
main
)没有新提交,当前分支(如feature
)会直接领先,main
分支的指针直接移动到feature-login
的最新提交,无合并提交。 - 若目标分支(如
main
)和当前分支(如feature
)都有新提交,则会生成一个新的合并提交,包含两个分支的修改。
注意:提交记录的顺序按照产生的先后顺序排列,而非合并的先后顺序。
4. 合并冲突
当两个分支修改了同一文件的同一部分时,Git 无法自动合并,需手动解决冲突。
冲突产生示例:
-
分支 A 修改
file.txt
第 5 行:Hello, World!
-
分支 B 修改
file.txt
第 5 行:Hi, Git!
-
合并时触发冲突。
冲突解决步骤:
-
定位冲突文件:
git status # 查看冲突文件列表
-
手动编辑冲突文件:
需要删除冲突标记,保留需要的代码。冲突标记示例:<<<<<<< HEAD Hello, World! # 当前分支(如 main)的修改 ======= Hi, Git! # 要合并的分支(如 feature)的修改 >>>>>>> feature
-
标记冲突已解决:
git add file.txt # 将解决后的文件加入暂存区
-
完成合并提交:
git commit -m "Merge feature into main" # 提交合并结果
还可以取消合并(放弃解决冲突):
git merge --abort # 终止合并,恢复到合并前的状态
七、远程仓库
概念:托管在因特网或其他网络中的你的项目的版本库。
作用:保存版本库的历史记录,多人协作。
创建:公司自己服务器 / 第三方托管平台(Gitee,GitLab,GitHub...)
1. 克隆远程仓库(Clone)
将远程仓库完整复制到本地,自动关联远程仓库(默认名为 origin
)。
1. 克隆命令
git clone <远程仓库URL> [本地目录名]
# 示例
git clone https://github.com/user/repo.git # 克隆到当前目录下的 repo 文件夹
git clone git@github.com:user/repo.git my-project # 使用 SSH 协议,并指定本地目录名
2. 克隆特定分支
git clone -b <分支名> <远程仓库URL>
# 示例
git clone -b dev https://github.com/user/repo.git # 克隆 dev 分支
3. 协议选择
协议类型 | URL 格式 | 特点 |
---|---|---|
HTTPS | https://github.com/user/repo.git | 无需配置 SSH 密钥,需输账号密码 |
SSH | git@github.com:user/repo.git | 需配置 SSH 密钥,无需输密码 |
2. 关联本地仓库与远程仓库
如果本地仓库未关联远程仓库,需手动添加关联。
添加远程仓库:
git remote add <远程仓库名> <远程仓库URL>
# 示例
git remote add origin https://github.com/user/repo.git
查看远程仓库地址:
git remote -v
3. 推送远程仓库
将本地仓库的提交(commit)上传到远程仓库。
1. 基本推送命令
git push <远程仓库名> <本地分支名>:<远程分支名>
# 示例
git push origin main # 将本地 main 分支推送到远程 main 分支(同名可简写)
git push origin dev:new-feat # 将本地 dev 推送到远程 new-feat 分支
2. 推送命令扩展
# 强制推送,覆盖远程分支,可能丢失他人提交,常用于修正提交历史后
git push -f origin main
# 推送所有本地分支到远程
git push --all origin
4. 拉取远程仓库
将远程仓库的最新代码同步到本地(相当于 git fetch
+ git merge
)。
1. 基本拉取命令
git pull <远程仓库名> <远程分支名>
# 示例
git pull origin main # 拉取远程 main 分支并合并到当前本地分支
2. 拉取并变基(Rebase)
避免产生合并提交,保持提交历史线性:
git pull --rebase origin main
3. 解决拉取冲突
若拉取时出现冲突(文件被多人修改):
-
根据提示手动解决冲突文件中的
<<<<<<< HEAD
和>>>>>>>
标记。 -
将解决后的文件标记为已解决:
git add <冲突文件>
-
继续合并:
git rebase --continue # 如果使用 --rebase 或 git commit -m "Merge conflict resolved" # 普通合并
推送冲突解决:
-
推送前先拉取最新代码:
git pull origin main # 拉取并合并远程变更 git push origin main # 重新推送
八、忽略文件
概念:.gitignore 文件可以让 git 彻底忽略跟踪指定文件
目的:让 git 仓库更小更快,避免重复无意义的文件管理
例如:
1.系统或软件自动生成的文件
2.编译产生的结果文件
3.运行时生成的日志文件,缓存文件,临时文件等
4.涉密文件,密码,秘钥等文件
创建:
1.项目根目录新建 .gitignore 文件
2.填入相应配置来忽略指定文件
注意:如果文件已经被暂存区跟踪过,可以从暂存区移除即可。