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"

注意: 现在得到的提交历史为 A -> B -> C -> D -> E -> F
查看 节点树 git log --oneline --graph --decorate --all
对于这样的长命令, 可以定义命令别名 alias glgt='git log --oneline --graph --decorate --all'

image.png

查看提交历史记录

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 上, 不能使用。

参考链接

上一篇下一篇

猜你喜欢

热点阅读