Git的使用
约 1819 字大约 6 分钟
2025-02-03
git三个区域
工作区
暂存区
仓库区
编写代码在工作区 使用git add "路径" 将代码文件推入暂存区
也可以使用 git add . 将那些 发生改变的文件 推送 一般使用这个命令
如果确认开发完成 可以使用git commit -m "说明信息" 推送到仓库中 将暂存区代码推送到版本库
git仓库初始化
命令会在当前目录下创建一个 .git
文件夹,用于存储 Git 仓库的元数据和对象数据库。
无论是本地 还是远程仓库,都有先初始化的过程
git 文件状态
未跟踪 U 新文件,没有被git管理过
已跟踪 A
- 新添加''
- 未修改
- 已修改M
当 第一次 将某文件推送到暂存区 为 新添加状态 仓库中没有之前的版本
当推送到仓库区 时,变为 未修改状态,意味着 是第一次推送该文件
而经过再次修改,该文件 变为 已修改状态 意味着 该文件存在过 且目前经历了一次修改
修改文件— 》暂存 -》提交保存记录
使用git status -s 查看改变暂存区和工作区文件状态
MM index.css 意味着 暂存区 / 工作区 均有过修改
当文件最终被存进仓库之后。 该命令为空。
Git 暂存区
临时存储 可以临时恢复代码内容。与版本库解耦
如使用git restore 文件标识 将暂存区 文件拿出来恢复到工作区
使用git rm --cached 目标文件 移除暂存区的目标文件
使用git ls-files 查看暂存区文件列表
使用git log --oneline 查看提交日志
Git 回退版本
把版本库某个版本对应的内容快照 恢复到工作区 / 暂存区
git reset --soft 版本号
git reset --hard 版本号 使用后 三区 的状态全都全都回退到 <commit _id >
时的状态
git reset --mixed 版本号 会更新暂存区的内容,使其与指定 <commit_id>
一致,但不会修改工作目录的内容
注意: 只有记录在版本库的提交记录才能恢复
回退后 继续修改->暂存->提交操作即可
git reflog --oneline查看提交完整日志
删除文件
要删除 某文件,并产生一次版本记录
- 手动删除工作区文件
- 暂存变更 / 手动删除暂存区文件 造成变更
- 提交保存
工作区只要改变,都可以暂存提交产生新记录
忽略文件
.gitignore 文件可以让git彻底忽略跟踪指定文件
- 系统或软件生成的
- 编程产生的
- 日志 缓存文件等
- 涉密文件等
创建过程
- 项目根目录新建.gitignore 文件
- 填入相关配置来忽略指定文件
如果文件已经被暂存区跟踪过 使用git rm --cached 从暂存区清除即可
分支
本质上是 指向提交节点的可变指针,默认名字是master
Head 指针 影响 工作区 / 暂存区 代码 切换时 会显示对应分支的代码文件
场景: 开发新需求/修复BUG 保证主线代码随时可用 ,多人协同开发提高效率
创建分支
git branch 分支名 创建分支
git checkout 分支名 切换分支
切换到每个分支 HEAD 都会指向对应的代码记录 会影响工作区 暂存区的代码
删除文件
git clean -n
先模拟删除操作,查看会删除哪些文件
git clean -f
确认无误后,实际删除未跟踪的文件
git checkout 分支
尝试切换分支
Git 远程仓库
托管在互联网保存版本库的历史记录 多人协作
托管在互联网上的版本库
建立:1. 远程仓库 新建仓库
- 本地仓库添加远程参考地址
- 使用命令git remote add 仓库别名 仓库地址
- 本地git仓库推送版本记录到远程仓库
- 使用命令 git push -u 远程仓库别名 本地:远程分支名
- 如 git push -u name master:master
使用 git remote -v 查看所有远程仓库
git remote remove origin 删除某个远程仓库
克隆远程仓库
使用git clone 远程地址
在运行命令所在文件夹 生成work项目文件夹 包含版本库,并映射到暂存区和工作区
- git本地仓库已经建立好和远程仓库的连接
- 仓库公开随意克隆 推送则需要管理员身份
多人协同开发 流程
开发者A 开发代码 -- 工作区 -- 暂存区 -- 提交 -- 拉取 -- 推送
开发者B -- 拉取
git pull origin master
等价于 git fetch + git merge
实际应用
本地仓库提交记录 与 远程对应仓库提交记录 不相关, 又想建立联系
先强制建立联系 git pull --rebase name master
- 初始化本地git
- 初始化远程git
- 本地配置远程仓库连接
- 本地拉取合并一下
- 本地推送到远程仓库
- 可选择开启仓库的网页服务
处理远程和本地仓库 状态不一致的问题
由于远程仓库已经初始化,可能存在一些本地仓库没有的提交(比如远程仓库的初始提交)。在推送之前,你需要将远程仓库的更新合并到本地仓库。这里可以使用 git pull
或者 git pull --rebase
命令
git pull
会将远程仓库的更新拉取到本地,并尝试与本地的提交进行合并。如果没有冲突,合并会自动完成;如果有冲突,你需要手动解决冲突。
git pull --rebase
会将本地的提交暂时保存,然后将本地分支更新到与远程分支相同的状态,最后再将本地的提交应用到更新后的分支上。这样可以使提交历史更加线性,避免不必要的合并提交。如果在变基过程中出现冲突,你需要手动解决冲突,然后使用 git rebase --continue
命令继续变基。
完成上述步骤后,你就可以使用 git push
命令将本地的提交推送到远程仓库:
git push -u origin master
-u
选项会将本地的 master
分支与远程的 master
分支关联起来,以后再推送时可以直接使用 git push
命令。
存在远程新提交冲突:如果在你本地编写代码时,远程仓库有了新的提交,并且这些提交与你本地的提交存在冲突,直接使用 git push
会失败。这种情况下,你需要先将远程的新提交拉取到本地,解决冲突后再进行推送。一般的操作步骤如下:
# 拉取远程新提交
git pull --rebase origin <branch-name>
# 解决冲突(如果有)
# ...
# 继续变基操作
git rebase --continue
# 推送本地提交
git push