Just My Life & My Work

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,在與較少協作者時保留完整分支歷史紀錄,讓我可以輕易回溯每個提交的時間與內容。😀

參考:Git Merge vs. Rebase vs. Squash Commit!

Comments on: "[圖解] git merge 和 git rebase 差異" (2)

  1. 未知 的大頭貼

    git merge 和 git rebase 的使用範例

    # 使用 git merge 合併分支

    git checkout master

    git merge feature

    # 使用 git rebase 合併分支

    git checkout master

    git rebase feature
    ==================

    rebase 的地方寫錯了吧?
    # 使用 git rebase 合併分支

    git checkout feature

    git rebase master

    才對

隨意留個言吧:)~

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

標籤雲