git - 在 git 中,fetch 与 pull 有何不同,merge 与 rebase 有何不同?

标签 git

我只是不明白这一点。我在网上和书籍上阅读了很多东西,但有些东西并没有留在我的脑海里。有人可以给我以下的虚拟版本吗:

  • git fetch 与 pull
  • git merge 与 rebase

最佳答案

获取与 pull

fetch 将从远程*分支下载任何更改,更新您的存储库数据,但保持本地*分支不变。

pull 将执行 fetch 并将更改merge 到您的本地分支。

有什么区别? pull 使用 pull 分支的更改更新您的本地分支。 fetch 不会推进您的本地分支。

merge 与 rebase

鉴于以下历史:

          C---D---E local
         /
    A---B---F---G remote

merge 将两个开发历史连接在一起。它通过在远程分支之上发散之后重放本地分支上发生的更改并将结果记录在新的提交中来实现这一点。此操作保留每个提交的祖先。

merge 的效果是:

          C---D---E local
         /         \
    A---B---F---G---H remote

rebase 将获取本地分支中存在的提交,并将它们重新应用到远程分支之上。此操作会重写您本地提交的祖先。

rebase 的效果是:

                  C'--D'--E' local
                 /
    A---B---F---G remote

有什么区别? merge 不会更改提交的祖先。一个 rebase 重写本地提交的祖先。

* 这个解释假设当前分支是一个本地分支,并且这个分支被指定为参数给fetch, pull, merge,或者rebase是远程分支。这是通常的情况。例如,pull 将从指定 分支下载任何更改,更新您的存储库并将更改 merge 当前 分支。

关于git - 在 git 中,fetch 与 pull 有何不同,merge 与 rebase 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14894768/

相关文章:

git - 为什么我需要强制 git 同步我的远程存储库?

git - 从目录中删除所有 git 文件?

git - 从 shell 脚本检查 git push 的响应

Git Credential Manager 不断为 Azure DevOps 生成 PAT

git - pull 请求和 Intellij

macos - Mac 的哪个图形化 git 工具可以比 github 更好地显示每个文件的历史记录?

git本地并发访问

git - 如何为标记的提交创建一个单独的分支?

linux - 如何访问路由器后面的私有(private)主机?

git - 有没有一种简单的方法可以压缩 git 中的许多提交?