Skip to content

Git的使用

约 1819 字大约 6 分钟

2025-02-03

git三个区域

工作区

暂存区

仓库区

编写代码在工作区 使用git add "路径" 将代码文件推入暂存区

也可以使用 git add . 将那些 发生改变的文件 推送 一般使用这个命令

如果确认开发完成 可以使用git commit -m "说明信息" 推送到仓库中 将暂存区代码推送到版本库

git仓库初始化

命令会在当前目录下创建一个 .git 文件夹,用于存储 Git 仓库的元数据和对象数据库。

无论是本地 还是远程仓库,都有先初始化的过程

git 文件状态

  1. 未跟踪 U 新文件,没有被git管理过

  2. 已跟踪 A

    1. 新添加''
    2. 未修改
    3. 已修改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查看提交完整日志

删除文件

要删除 某文件,并产生一次版本记录

  1. 手动删除工作区文件
  2. 暂存变更 / 手动删除暂存区文件 造成变更
  3. 提交保存

工作区只要改变,都可以暂存提交产生新记录

忽略文件

.gitignore 文件可以让git彻底忽略跟踪指定文件

  1. 系统或软件生成的
  2. 编程产生的
  3. 日志 缓存文件等
  4. 涉密文件等

创建过程

  1. 项目根目录新建.gitignore 文件
  2. 填入相关配置来忽略指定文件

如果文件已经被暂存区跟踪过 使用git rm --cached 从暂存区清除即可

分支

本质上是 指向提交节点的可变指针,默认名字是master

Head 指针 影响 工作区 / 暂存区 代码 切换时 会显示对应分支的代码文件

场景: 开发新需求/修复BUG 保证主线代码随时可用 ,多人协同开发提高效率

创建分支

git branch 分支名 创建分支

git checkout 分支名 切换分支

切换到每个分支 HEAD 都会指向对应的代码记录 会影响工作区 暂存区的代码

删除文件

git clean -n

先模拟删除操作,查看会删除哪些文件

git clean -f

确认无误后,实际删除未跟踪的文件

git checkout 分支

尝试切换分支

Git 远程仓库

托管在互联网保存版本库的历史记录 多人协作

托管在互联网上的版本库

建立:1. 远程仓库 新建仓库

  1. 本地仓库添加远程参考地址
  2. 使用命令git remote add 仓库别名 仓库地址
  3. 本地git仓库推送版本记录到远程仓库
    1. 使用命令 git push -u 远程仓库别名 本地:远程分支名
    2. 如 git push -u name master:master

使用 git remote -v 查看所有远程仓库

git remote remove origin 删除某个远程仓库

克隆远程仓库

使用git clone 远程地址

在运行命令所在文件夹 生成work项目文件夹 包含版本库,并映射到暂存区和工作区

  1. git本地仓库已经建立好和远程仓库的连接
  2. 仓库公开随意克隆 推送则需要管理员身份

多人协同开发 流程

  1. 开发者A 开发代码 -- 工作区 -- 暂存区 -- 提交 -- 拉取 -- 推送

  2. 开发者B -- 拉取

git pull origin master

等价于 git fetch + git merge

实际应用

本地仓库提交记录 与 远程对应仓库提交记录 不相关, 又想建立联系

先强制建立联系 git pull --rebase name master

  1. 初始化本地git
  2. 初始化远程git
  3. 本地配置远程仓库连接
  4. 本地拉取合并一下
  5. 本地推送到远程仓库
  6. 可选择开启仓库的网页服务

处理远程和本地仓库 状态不一致的问题

由于远程仓库已经初始化,可能存在一些本地仓库没有的提交(比如远程仓库的初始提交)。在推送之前,你需要将远程仓库的更新合并到本地仓库。这里可以使用 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