【Git】从本地存档到协作开发的Git简单使用

概念

  1. 工作区 : 在本地实际进行文件操作的目录 .
  2. 暂存区 : 类似于缓冲区 , 用于记录准备进行下一次提交的内容 .
  3. 本地仓库 : 储存在本地的完整版本库 , 包含项目的提交历史 , 分支信息和标签等 .
  4. 远程仓库 : 部署在远程服务器的版本库 , 通常用于协作开发 .

文件状态

  1. Untracked 未追踪 : 新创建或移动复制到本项目目录的文件 , 在未执行暂存命令前 , 文件处于未追踪状态 .
  2. Committed 已提交 : 将已暂存文件进行提交后的文件 , 已安全保存在本地仓库 , 文件的内容被记录为一次提交对象 .
  3. Modified 已修改 : 对工作区已提交文件进行更改后的文件 , 更改尚未保存到本地仓库 .
  4. Staged 已暂存 : 对工作区已修改文件或未追踪文件进行标记后的文件 , 文件被添加到暂存区 .

分支

分支是指向提交版本的可变指针 , 提交版本操作时 , 当前分支的指针会跟随指向新的提交版本 .

  1. 增加分支 :
    1. 仅创建 : git branch <分支名>
    2. 创建并切换 : git checkout -b <分支名>
  2. 切换分支 : git checkout <分支名>
  3. 合并分支 : git merge <分支名> 合并指定分支到当前分支 .
    如果两个分支对同一文件的同一部分进行了不同修改 , 即会发生合并冲突 , 此时需要手动处理冲突文件 . 可以通过 git status 查看冲突文件 , 编辑完成后重新将文件放入暂存区后提交完成合并 .
  4. 查看分支 : git branch
  5. 删除分支 :
    1. 检查删除 : git branch -d <待删除的分支名>
    2. 强制删除 : git branch -D <待删除的分支名>

控制台命令

本地仓库 - 暂存区 - 工作区

  1. 在当前项目目录初始化 git 仓库 : git init
  2. 将已修改文件提交到暂存区 :
    1. 单文件 : git add <文件路径或文件名>
    2. 多文件 : git add <文件路径或文件名1> <文件路径或文件名2> ...
    3. 特征文件 : git add *.txt 将当前目录所有以 .txt 结尾的文件添加到暂存区 .
    4. 全部文件 : git add *
  3. 将已暂存文件提交到本地仓库 :
    1. 单行备注 : git commit -m "备注"
    2. 多行备注 : git commit 进入文本编辑器进行备注编辑
      如果文本编辑器是 Vim , Esc + :wp 用于保存备注并返回至 Git Bash
    3. 直接提交 : git commit -a -m "备注" 跳过缓冲区将所有非未追踪文件的修改提交到本地仓库 .
    4. 追加提交 : git commit --amend -m "新备注" 将更改直接追加到上一次提交并更新备注 ( 谨慎使用 ) .
  4. 查看提交历史记录 : git log
  5. 将历史提交恢复到工作区 : git checkout <提交哈希值> -- <期望恢复的文件>
    分支指向提交版本 , 切换分支时也使用 git checkout <分支名> 命令 , 同时工作区的文件会更新至新分支指向的提交版本 . 切换到新分支时 , 新分支需要存在 , 可以使用 git checkout -b <新分支> 创建新分支并切换至改分支 , 创建新分支时新分支会指向当前分支所指向的提交版本 .
    全局恢复 : git checkout <提交哈希值>

远程仓库 - 本地仓库 - 工作区

  1. 关联远程仓库 : 如果本地仓库不是通过克隆创建的 : git remote add <远程仓库名(通常为origin)> <远程仓库地址>
    1. 如何使用克隆创建本地仓库 ? git clone <远程仓库地址>
    2. 如果本地仓库是使用克隆创建的 ? 在克隆过程中 , 本地仓库会自动与远程仓库进行关联 , 不需要重新关联远程仓库 .
    3. 远程仓库的地址类型有 ? HTTPSSSH .
    4. 一个本地仓库可以关联多个远程仓库 .
  2. 查看远程仓库信息 : git remote -v 查看远程仓库的名称和对应的 URL .
  3. 拉取远程仓库的版本 : git pull <远程仓库名> <远程分支名>
    拉取版本相当于合并分支 , 同样具有合并冲突 , 手动解决冲突后暂存+提交来完成合并 .
  4. 推送本地提交到远程仓库 : git push <远程仓库名> <本地分支名>:<远程分支名>
    若本地分支名和远程分支名相同可简化为 git push <远程仓库名> <共同分支名> .
    首次推送本地分支到远程仓库的同名分支时 , 可使用 git push -u <远程仓库名> <共同分支名> 关联本地和远程 , 后续推送仅使用 git push 即可 .
  5. 查看远程提交记录 : git log <远程仓库名>/<远程分支名>

协作开发

  1. 拉取克隆仓库 git clone
    拉取该分支所指向的版本 , 远程仓库关于该分支的提交历史 , 与该分支相关的其他分支 . 在提交时 git 首先会检查远程仓库和本地仓库关于当前分支 ( 不一定是拉取分支 ) 的提交历史是否一致 , 不一致则拒绝提交 .
  2. 2.1 创建任务分支 git checkout -b <你负责的分支>
    2.2 查看提交差异 git diff
  3. 如果远程有更新 :
    3.1 切换回有更新的分支 git checkout <分支名>
    3.2 拉取远端更新 git pull origin <分支名>
    3.3 切换回任务分支 git checkout <你负责的分支>
  4. 远程同步三步法的简化 :
    4.1 当前处于任务分支 .
    4.2 使用变基命令 git rebase <分支名> 将更新的分支直接同步到本地仓库
    可能出现合并冲突 ! 需要手动处理冲突部分 .
  5. 远程提交冲突 :
    两人负责同一分支 , 一人先提交到远程仓库 , 另一个人再提交可能会发生提交被拒绝的情况 , 提交时 git 会检查远程分支是否存在新的提交 , 如果本地的提交历史和远程分支不一致 , 提交会被拒绝 . 另一个人需要将远程分支的更新拉取到本地 , 解决合并冲突后再推送到远程分支 .

远程拉取命令区别

  1. git clone : 用于把远程仓库完整拉取到本地 , 会复制远程仓库中所有文件和版本历史 , 自动创建一个指向远程仓库的默认分支 origin .
  2. git fetch : 用于获取远程仓库的最新更新 , 而不合并到当前分支 . 后续需手动合并或变基 .

变基原理

  1. 确认任务分支和远程仓库分支的共同祖先提交 ( 分叉点 ) .
  2. 提取远程任务分支从分叉点之后的所有提交 , 并将他们保存到一个临时区域 .
  3. 移动任务分支指向远程仓库分支的最新提交上 .
  4. 将临时区域保存的提交应用到最新提交上 .
    此时有可能出现提交冲突 : 远程分支最新提交的文件和临时区域的版本有冲突 , 需要手动更改提交 .
相关推荐
GISer_Jing9 小时前
Git协作开发:feature分支、拉取最新并合并
大数据·git·elasticsearch
高山莫衣14 小时前
git rebase多次触发冲突
大数据·git·elasticsearch
码农藏经阁14 小时前
工作中常用的Git操作命令(一)
git
kobe_OKOK_15 小时前
【团队开发】git 操作流程
git·elasticsearch·团队开发
码农垦荒笔记15 小时前
Git 安装闭坑指南(仅 Windows 环境)
windows·git
CC码码1 天前
管理你的多个 Git 密钥(多平台多账号)
git·gitlab·github
CC码码1 天前
管理你的多个 Git 密钥(单平台多账号)
git·gitlab·github
大卫小东(Sheldon)1 天前
GIM 1.5发布了! 支持Windows系统了
git·ai·rust
flying jiang1 天前
将大仓库拆分为多个小仓库
git
李boyang10 天前
Git(四):远程操作
git