# git-pre-teach **Repository Path**: moyinzi/git-pre-teach ## Basic Information - **Project Name**: git-pre-teach - **Description**: 呜姆,熟悉一下 git rebase 操作,顺便准备一下给别人讲 git 基础命令和合并冲突。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-05-29 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # git-pre-teach 呜姆,熟悉一下 git rebase 操作,顺便准备一下给别人讲 git 基础命令和合并、解决冲突。 ## 使用 merge 合并、解决冲突 ### 正常的、无冲突合并 ![](./resources/1-1.png) ![](./resources/1-2.png) ![](./resources/1-3.png) ![](./resources/1-4.png) ### 解决冲突 ![](./resources/2-1.png) ![](./resources/2-2.png) ![](./resources/2-3.png) ![](./resources/2-4.png) ![](./resources/2-5.png) ![](./resources/2-6.png) ![](./resources/2-7.png) ## 使用 rebase 合并、解决冲突 ### 理论 + 多人在同一个分支上协作时,很容易出现冲突。即使没有冲突,后push的童鞋不得不先pull,在本地合并,然后才能push成功。 + 每次合并再push后,分支变成了…… ![](./resources/3-1.png) + 总之看上去很乱,有强迫症的童鞋会问:为什么Git的提交历史不能是一条干净的直线? + 其实是可以做到的! + Git有一种称为rebase的操作,有人把它翻译成“变基”。 + rebase操作的特点:把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。 + rebase操作可以把本地未push的分叉提交历史整理成直线 + rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。 ### 实践 再改一段 in master dvvsvcsdvvsd 总之做些修改,和之前一样 ![](./resources/4-1.png) ![](./resources/4-2.png) ![](./resources/4-3.png) ![](./resources/4-4.png) ![](./resources/4-5.png) ![](./resources/4-6.png) ![](./resources/4-7.png) ![](./resources/4-8.png) + 以上,翻车现场 ### 实践2 ![](./resources/5-1.png) ![](./resources/5-2.png) ![](./resources/5-3.png) + 重点 rebase 在 add 后不要 commit ## 参考 [这个是比较有名的 git 教程,进一步学习去这里](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000) ## 追加内容 ### 项目依赖相关 + submodules 子模块 [参考](https://blog.csdn.net/fanchaochaoit/article/details/52860452) + subtree 子树 + [参考](https://segmentfault.com/a/1190000012002151) + 链接子树前记得把子树的更改暂存并提交 + 区别(我的理解) + submodules 相当于在目录下 git clone 了一个依赖 + subtree 只同步了文件来进行依赖 ### 工作流相关 + worktree 工作树(可以免去切换分支同时工作、同一分支不能出现在不同的树上) + `git worktree add -b hotfix-5 ../git-pre-teach-lib/hotfix-5 origin/master` + 删的时候直接把建立的 `../git-pre-teach-lib/hotfix-5` 删了 + 然后执行 `git worktree prune` 刷新一下 + 注意:subtree 和 worktree 的概念没有半毛钱关系