【发布时间】:2018-05-16 08:08:54
【问题描述】:
我想我理解git pull,这就是我解释它的方式,我称之为“简单的术语”:
- 一般来说,
git pull是关于合并一个“远程”分支到一个“本地”分支。 - 更详细地说,git 使用“远程”分支的内容来“更新”/“修改”“本地”分支的内容。
- 更详细地说,如果一个文件在“local”分支中被修改,但在“remote”分支中没有被修改,那么在合并后,文件的内容将与“local”中的内容相同“ 分支。反之亦然。如果文件在“remote”分支上修改但不在“local”分支中,则内容将从“remote”分支获取。
- 如果文件在两个分支(“本地”和“远程”)中都被修改,那么 git 将尝试从两个分支中进行修改。如果更改发生在文件的不同位置,则这两项更改都将应用并在合并后出现在文件的内容中。
- 如果更改发生在同一个地方,我们就会遇到所谓的“合并冲突”,为简单起见,我不打算讨论这种情况。
- 由于合并,我们修改了“本地”存储库,因此我们需要“提交”。
现在我想为git pull --rebase 得到同样的解释。我不想使用诸如“head”、“index”、“fetch”、“upstream”之类的术语,因为这些术语/概念只会让像我这样的初学者感到困惑。我知道我需要学习这些“高级”概念,我通过阅读教程来做到这一点,但现在,作为我学习过程的一部分,我想了解git pull --rebase。
添加
我想在某个时候我听到了以下解释。通过git pull --rebase。当我们合并时,我们不是以“对称”方式进行的,如上所述。相反,我们首先“忘记”“本地”存储库中的更改,只应用“远程”存储库中的更改。通过这样做,我们基本上“复制”了远程存储库。之后,我们应用顶部“本地”存储库中的更改。但是,我仍然不清楚这到底是什么意思。特别是“在上面”是什么意思。
【问题讨论】:
-
请注意,git pull 是一个 git fetch 后跟一个 git merge。它实际上可能有助于理解什么是 HEAD 以及索引。如果你不这样做,如果事情没有按计划很快进行,你就会撞到沙洲。
-
正如我在问题中所写,我不知道“获取”是什么意思。
-
@Roman,你现在做...
-
不幸的是,正如亚历克西斯在他的回答中所说,“获取”不是一个高级概念。 Git 的索引也不是。 with fetch 和 with index 可以做的一些技巧是,但这两个是你必须理解的基本概念。正如@rubenvb 所指出的,如果您不知道索引的存在本身就会导致问题。这有点不幸,当我开始使用 Git 时也没有向我解释清楚。
标签: git git-rebase git-pull