【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. 将临时区域保存的提交应用到最新提交上 .
    此时有可能出现提交冲突 : 远程分支最新提交的文件和临时区域的版本有冲突 , 需要手动更改提交 .
相关推荐
西瓜本瓜@2 小时前
在Android中如何使用Protobuf上传协议
android·java·开发语言·git·学习·android-studio
Э时间行者于我6 小时前
git同时删除多个分支
git
我的golang之路果然有问题13 小时前
给git配置SSH(github,gitee)
经验分享·笔记·git·学习·gitee·ssh·github
漫步企鹅15 小时前
[Git] Git Stash 命令详解
git·git push·git pull·git commit·git pull rebase
船长@Quant17 小时前
协作开发攻略:Git全面使用指南 — 第二部分 高级技巧与最佳实践
git·版本控制·源代码管理·协作开发
用户126538387051219 小时前
github 和 gitee 配置问题及相关问题解决
git·github
极小狐19 小时前
极狐GitLab Git LFS 速率限制如何设置?
运维·git·ssh·gitlab·github
极小狐19 小时前
如何解决极狐GitLab 合并冲突?
人工智能·git·机器学习·gitlab
一袋米扛几楼9820 小时前
【GIT】github中的仓库如何删除?
git·github