git rebase 和 git merge

weixin_34413065發表於2019-01-17

建立一個本地倉庫 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'

4075144-916eb0e45e400634.png
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  // 可以看到, 提交歷史記錄是一條線
4075144-3d7103a5d91084ad.png
image.png

注意:
不要在 公共共享庫上使用 git rebase , 比如我們的 master 和 dev 上, 不能使用。

參考連結

相關文章