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
用于获取远程仓库的最新更改,但不会自动将其合并到当前分支。这使你能够在决定是否合并之前查看和理解远程仓库的更改。