git-pull——重基

git-pull——重基,git,git-rebase,Git,Git Rebase,开始情况(无未推送的更改,表示当前分支): 在git fetch之后,日志结构通常如下所示 o E [origin/master] | o C' | o B' | o D | | o C [>master] | | | o B |/ o A | ... 现在,git-rebase-origin/master经常产生冲突。如果master=origin/master,那么git-pull-rebase是否更智能,只需使用git-reset使master也指向E,如果master最初是ori

开始情况(无未推送的更改,
表示当前分支):

git fetch
之后,日志结构通常如下所示

o E [origin/master]
|
o C'
|
o B'
|
o D
|
| o C [>master]
| |
| o B
|/
o A
|
...
现在,
git-rebase-origin/master
经常产生冲突。如果
master
=
origin/master
,那么
git-pull-rebase
是否更智能,只需使用
git-reset
使
master
也指向
E
,如果
master
最初是
origin/master
git-pull-rebase
与以下操作类似:

git fetch
git rebase
因此,在您的情况下,它将像这样离开存储库:

o C [> master]
|
o B
|
o E [origin/master]
|
o C'
|
o B'
|
o D
|
o A
|
...

请注意,您拥有的两个提交与在提交E上重新创建的原始提交不同。

您可以使用rebase而不是merge进行拉取-这是我的团队的工作方式,它工作得非常好

从“”:

由于git中的分支合并是通过合并提交记录的,因此 被认为是有意义的,例如,指示特征 已合并到发布分支。然而,在日常生活中 多个团队成员经常同步单个分支的工作流 timeline被常规git上不必要的微合并所污染 拉。重定基可确保始终重新应用提交,以便 历史是线性的

您可以将某些分支配置为在不使用 --重设基准标志:

#使主控台上的“git pull”始终使用rebase

$git config branch.master.rebase true

您还可以设置一个全局选项来设置 每个新跟踪分支的最后一个属性:

#为每个跟踪分支设置重基

$git config--global branch.autosetuprebase始终

git-pull--rebase
git-fetch不一样;git rebase
。不幸的是,
git pull
手册页对差异的理解相当模糊:

   --rebase
       Rebase the current branch on top of the upstream branch
       after fetching. If there is a remote-tracking branch
       corresponding to the upstream branch and the upstream branch
       was rebased since last fetched, the rebase uses that
       information to avoid rebasing non-local changes.
事实证明,这种差异并不涉及原始海报猜测的git reset——事实上它涉及到reflog(看看你以前是否没有遇到过这个术语)

有关
git pull--rebase中额外魔力的完整故事,请参见以下答案:


看起来您将
B
B'
C
C'
混合在一起了。不幸的是,在实践中,如果
B
C
已经是
origin/master
的一部分(由于之前的樱桃采摘或重新基址),
git pull--rebase
git fetch不同;git rebase
-请参阅。最后一句话令人费解。
   --rebase
       Rebase the current branch on top of the upstream branch
       after fetching. If there is a remote-tracking branch
       corresponding to the upstream branch and the upstream branch
       was rebased since last fetched, the rebase uses that
       information to avoid rebasing non-local changes.