Git merge 與 Git rebase
看這個圖就行了
git merge
、git rebase
和 git fetch
是 Git 中的三個不同的命令,它們分別用于不同的目的。以下是它們的主要區別:
-
git merge
(合并):- 用途: 用于將一個分支的更改合并到另一個分支。
- 特點: 創建一個新的合并提交,將兩個分支的歷史合并在一起。產生一個合并的分支歷史,可以保留原始分支的完整歷史。
- 適用場景: 通常用于將一個分支的更改合并到另一個分支,保留清晰的分支分離。
# 示例:將 feature-branch 的更改合并到 main 分支 git checkout main git merge feature-branch
-
git rebase
(變基):- 用途: 用于將一個分支的更改合并到另一個分支,但與合并不同,它創建一個線性的提交歷史。
- 特點: 移動或合并提交,將當前分支的更改應用在目標分支的最新提交之上。不會創建合并提交,使提交歷史更為線性。
- 適用場景: 用于保持提交歷史的干凈和線性,特別是在為拉取請求準備分支時。
# 示例:將 feature-branch 的更改變基到 main 分支 git checkout main git rebase feature-branch
-
git fetch
(難點):- 用途: 從遠程存儲庫中獲取最新的更改,但不自動合并到當前工作分支。
- 特點: 更新本地倉庫的遠程跟蹤分支,使它們反映遠程存儲庫的最新狀態,但并不會更改工作目錄中的文件。
- 適用場景: 用于查看遠程倉庫的最新更改,然后決定是否將這些更改合并到本地分支。
記住這個就夠了
git pull = git fetch + git merge
# 示例:獲取遠程倉庫的最新更改,但不合并到當前分支
git fetch origin
假設你有一個遠程倉庫(通常稱為 “origin”)和一個本地分支(例如,main
分支)。在遠程倉庫中,有一些新的提交,但你的本地倉庫并沒有跟蹤這些更改。
執行 git fetch
的過程如下:
-
查看當前狀態: 在執行
git fetch
之前,你可以使用以下命令查看當前狀態:git status
如果有未提交的更改,可以選擇提交或者保存更改。
-
執行
git fetch
: 執行以下命令:git fetch origin
這會將遠程倉庫(
origin
)的最新更改拉取到本地,但并不會自動合并到你的當前分支。 -
查看新的分支狀態: 查看遠程倉庫的分支狀態,可以使用以下命令:
git branch -a
這將顯示本地分支和遠程分支的列表。你會看到類似
origin/main
的遠程分支。 -
切換到本地分支: 如果你想要合并這些遠程更改到你的本地分支,可以執行以下命令:
git checkout main
或者使用以下命令創建并切換到一個新的本地分支:
git checkout -b new-branch-name origin/main
這將創建一個新的本地分支,并將其設置為跟蹤遠程倉庫的
main
分支。 -
查看新的更改: 查看本地分支的最新更改:
git log
這將顯示遠程倉庫的最新提交,你可以選擇合并或者進一步處理這些更改。
git fetch
用于獲取遠程倉庫的最新更改,但不會自動將其合并到當前分支。這使你能夠在決定是否合并之前查看和理解遠程倉庫的更改。