前言

这偏文章用于给 git 入门的人,讲述 git 中的基本使用
git 的使用中,主要有:

  • git clone 克隆线上仓库
  • git add 添加文件到本地缓存
  • git commit 提交文件到本地仓库
  • git push 推送文件到线上仓库
  • git pull 拉去线上变更
  • git branch 基于当前分支创建新分支
  • git checkout 切换分支
  • git merge 合并分支
  • git cherry-pick 将其他分支的 commit 拷贝到当前分支

其中 git merge 与 git pull 是常见的会发生冲突的

项目初始化

码云创建仓库

image.png
image.png

从线上克隆仓库

  • 复制 git 地址

image.png

  • 本地对应位置打开终端

image.png

  • 将线上仓库克隆到本地

git clone {线上 git 仓库地址}
image.png

idea 初始化

idea 打开刚刚的 git 项目

image.png
image.png
image.png
此时我们将在 idea 中看到一个 git-demo 项目,同时它为一个空项目,它默认的分支为 master 分支

idea 初始化内容

创建 .gitignore 文件,用于忽略一些不需要提交的内容,如 .idea 目录,它是 idea 加载产生的缓存目录,不需要提交到线上
image.png

下载 git commit 插件

这个插件可以用来以固定的格式提交 commit 日志,方便后期查看 commit 日志

  • 打开 idea 设置窗口

image.png

  • 定位到 pulgins 界面

image.png

  • 搜索框输入 git commit 搜索插件

image.png
image.png

  • 然后关闭设置页面,使用 cmd + k 快捷键,打开 git commit 窗口,或者使用以下手动操作打开 git commit 窗口

image.png
image.png

  • 然后可在 git commit 窗口中检查插件是否安装完成

image.png

git 简单推送

创建 readme.md

创建文件选择 add,这样提交的时候可以直接执行 commit,idea 层会自动处理 add
image.png
输入内容
image.png
提交代码到本地仓库 commit
image.png
点击 ok 后会在 commit 栏填充输入的内容
image.png
点击 commit 提交代码到本地仓库
image.png
提交成功
image.png
快捷键 cmd + shift + k 推送代码到线上
image.png
首次推送需要输入码云的邮箱、密码
image.png
推送成功
image.png

git 模拟多人协作

模拟多人协作 push 冲突

在本地重新找一个目录,重新克隆线上的 git 仓库,然后用 idea 打开,模拟多人协作
地址2:
image.png
地址1:
image.png

制造 pull 冲突

在第一个地址中进行以下修改,并提交
image.png
image.png
在第二个地址中进行以下修改
image.png
image.png
此时第二个地址 push 代码的时候,本地代码会与线上代码发生冲突
image.png
为了提交记录的可读性,使用 rebase 别使用 merge,(rebase 和 merge 原理没有深究,有兴趣可以研究分享给我)
然后会出现下面的解决冲突界面,此时需要我们手动的解决冲突
image.png
点击 merge 打开冲突操作界面
image.png
点击箭头表示使用更改
image.png
点击叉叉表示删除更改
image.png
两边更改都保存的样子
image.png
只保留了右边更改的样子
image.png
只保留了左边更改的样子
image.png
如果保存错误可以使用快捷键 cmd + z 撤回操作
此时我同时保留了两边的修改,然后点击 apply 保存
image.png
本地的 readme.md 文件中内容已经发生了更新
image.png
此时只是在本地仓库发生了冲突合并,还没推送到线上,再次使用 cmd + k 将代码推送到线上
所以还是在代码开发前进行 pull 拉取代码比较安全,这样可以一定程度上降低冲突风险
拉取线上代码的图标
image.png
使用 rebase 拉取代码
image.png

未完待续。。。

后面还有

  • 本地 commit 撤回
  • push 线上撤回
  • 分支切换
  • 本地 merge
  • 本地 merge 撤回
  • 本地 cherry-pick
  • 本地 cherry-pick 撤回
  • 打 tag 标签

(git 所有操作都有痕迹可寻,如有问题,请暂停任何操作,寻求帮助)