git rebase 和 git merge
2019-01-17 本文已影响0人
foolish_hungry
创建一个本地仓库 testResp
cd /User/../testResp
初始化
git init
// 创建完仓库默认是一个 master 分支
查看目录
cd .git
open . 或者使用 tree .
新建一个readme.md文件,往里面添加内容
cd ..
touch readme.md
open readme.md
添加到暂存区
// 可以先 用 git status 查看状态
git add .
提交内容
git commit -m '提交记录 A'
创建分支 dev 分支, 并检出
git checkout -b dev
// 相当于 git branch dev && git checkout dev
在原来的文件 readme.md
中增加内容
git add .
在 dev 上提交修改了的 readme
git commit -m "提交记录 B"
切回到 master 分支
git checkout master
修改 readme 文件, 并添加
open readme.md
git add .
在 master 上提交修改的内容
git commit -m '提交记录 C'
在 master 上再添加一个新文件 hello.py
touch hello.py
提交 hello.py
git commit -m "提交记录 D"
再切换到 dev 上添加 world.py 并提交
git checkout dev
touch world.py
git add .
git commit -m "提交记录 E"
至此, 我们分析一下:
master 分支的 节点指向链表 A -> C -> D
dev 分支的 节点指向链表 A -> B -> E
master 和 dev 分支上的祖先节点为 A
在 master 分支上做 git merge dev 操作
git checkout master
提示, readme.md 产生冲突, 解决冲突, 再添加, 并提交
open readme.md
git add .
git commit -m "提交记录 F"
image.png注意: 现在得到的提交历史为 A -> B -> C -> D -> E -> F
查看 节点树 git log --oneline --graph --decorate --all
对于这样的长命令, 可以定义命令别名 alias glgt='git log --oneline --graph --decorate --all'
查看提交历史记录
git log
采用git merge dev处理提交log是按照时间戳先后顺序的。
采用的是git rebase处理过程为:
git checkout dev
git rebase master // 将dev上的B、E在master分支上做一次衍合处理
产生冲突, 解决冲突后, 执行
open readme.md
git add .
git rebase --continue
执行 git log 可以看到, 不是按时间顺序处理的
A - C - D - B - E
git rebase可以得到一个更加简洁的提交历史,无需多了F。
最后执行
git checkout master
git merge dev // 可以看到, 提交历史记录是一条线
image.png
注意:
不要在 公共共享库上使用 git rebase , 比如我们的 master 和 dev 上, 不能使用。