Git 版本控制是軟體開發非常重要的工具,而 git 指令有非常多妙用,可根據自身需求來使用。其中 git merge 和 git rebase 差異會是我想要了解的地方。因為有同事和老闆(會寫程式)比較偏好 git rebase 來合併分支,讓我覺得有必要了解其原因。🤔

上圖作者有做解釋:
git merge 和 git rebase 有什麼區別?
當我們從一個 Git 分支到另一個 Git 分支時,我們可以使用“git merge”或“git rebase”。 上圖顯示了這兩個命令的工作原理。
𝐆𝐢𝐭 𝐌𝐞𝐫𝐠𝐞
這會在主分支中創建一個新的提交 G’。 G’將主要分支和特徵分支的歷史聯繫起來。
Git merge 是 𝐧𝐨𝐧-𝐝𝐞𝐬𝐭𝐫𝐮𝐜𝐭𝐢𝐯𝐞。 主分支和功能分支都沒有改變。
𝐆𝐢𝐭 𝐑𝐞𝐛𝐚𝐬𝐞
Git rebase 將功能分支歷史移動到主分支的頭部。 它為功能分支中的每個提交創建新的提交 E’、F’ 和 G’。
rebase 的好處是它有 𝐥𝐢𝐧𝐞𝐚𝐫 𝐜𝐨𝐦𝐦𝐢𝐭 𝐡𝐢𝐬𝐭𝐨𝐫𝐲。
如果不遵循“git rebase 的黃金法則”,Rebase 可能會很危險。
𝐓𝐡𝐞 𝐆𝐨𝐥𝐝𝐞𝐧 𝐑𝐮𝐥𝐞 𝐨𝐟 𝐆𝐢𝐭 𝐑𝐞𝐛𝐚𝐬𝐞
切勿在公共分支上使用它!
—
接下來詳細說明兩者特性~
git merge 和 git rebase 都是合併分支的工具,但兩者有以下幾個主要差異:
- 歷史紀錄:git merge 會在合併分支後,新增一個合併專用的 commit,而 git rebase 則會將合併分支的 commit 歷史重新整理到被合併分支的後面。因此,使用 git merge 合併後的歷史紀錄會比較複雜,而使用 git rebase 合併後的歷史紀錄會比較簡潔。
- 衝突:git merge 合併時,如果合併分支和被合併分支的 commit 有衝突,Git 會提示用戶手動解決衝突。而 git rebase 合併時,Git 會自動將合併分支的 commit 應用到被合併分支,並解決衝突。因此,使用 git rebase 合併時,可能會遇到更多衝突。
- 回溯:git merge 合併後,如果需要回溯到合併之前的版本,可以使用 git reset –hard HEAD~1。而 git rebase 合併後,如果需要回溯到合併之前的版本,可以使用 git rebase –abort。
git merge 和 git rebase 的使用範例
# 使用 git merge 合併分支
git checkout master
git merge feature
# 使用 git rebase 合併分支
git checkout master
git rebase feature
git merge 和 git rebase 的使用時機
一般來說,在以下情況下建議使用 git merge:
- 合併分支後,需要與其他人共享歷史紀錄。
- 合併時,可能會產生衝突,需要手動解決衝突。
在以下情況下建議使用 git rebase:
- 合併分支後,不需要與其他人共享歷史紀錄。
- 合併時,不需要手動解決衝突。
- 想要整理分支的歷史紀錄。
結論
git merge 和 git rebase 各有優缺點,因此在使用時應根據實際情況進行選擇。如果需要保持簡潔的歷史紀錄,可以使用 git rebase。如果需要保持完整的歷史紀錄,可以使用 git merge。
我個人偏好 git merge,在與較少協作者時保留完整分支歷史紀錄,讓我可以輕易回溯每個提交的時間與內容。😀
Comments on: "[圖解] git merge 和 git rebase 差異" (2)
git merge 和 git rebase 的使用範例
# 使用 git merge 合併分支git checkout mastergit merge feature# 使用 git rebase 合併分支git checkout mastergit rebase feature==================
rebase 的地方寫錯了吧?
# 使用 git rebase 合併分支git checkoutfeaturegit rebase master才對
讚讚
謝謝您的建議
讚讚