首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git pull rebase -什么是rebase

Git pull rebase -什么是rebase
EN

Stack Overflow用户
提问于 2014-11-06 07:08:08
回答 2查看 276关注 0票数 1

我仍然不明白git pull到底发生了什么--rebase。我理解remote的概念,并且在我自己的本地未发布的分支中使用过它,当我的分支已经在远程发布时,我从来没有使用过它。我听说过使用remote进行rebase的危险,看着git pull --rebase,我不太理解这样做是安全的还是不安全的。

例如,假设我正在使用MyBranch分支,并且一直在将其推送到远程,以便将其存储在我自己的本地计算机之外的其他地方(可能其他人会合并我的更改以保持开发同步)。

代码语言:javascript
复制
a--b--c--d--g--h (master, origin/master)
      \
       e--f--i (MyBranch, origin/MyBranch)

假设我做了一些当地的开发

代码语言:javascript
复制
a--b--c--d--g--h (master, origin/master)
      \
       e--f--i (origin/MyBranch)--j--k--l (MyBranch)

假设其他人用master中的开发更新了MyBranch。

代码语言:javascript
复制
 a--b--c--d--g--h (master, origin/master)
       \         \
        e--f--i---m( origin/MyBranch)
               \
                j--k--l(MyBranch)

如果我随后通过拉git pull --rebase进行更新,我的树看起来会是什么样子?它只会重写j,k,l(对我来说是本地的)的历史记录,并将其放在m的顶部,还是会重写远程分支上已经存在的其他历史记录?

rebase的起始点到底是什么,重放是什么?

另外,如果origin/MyBranch被合并到其他上游分支中,比如“开发”,那么我的rebase意味着什么?

代码语言:javascript
复制
a--b--c--d--g--h (master, origin/master) --n --o --p (origin/develop)
      \         \                                 /
       e--f--i---m( origin/MyBranch)--------------
              \
               j--k--l(MyBranch)
EN

回答 2

Stack Overflow用户

发布于 2014-11-06 14:28:40

A评论,git pull --rebase是:

在此

  • git fetch:您的远程跟踪分支origin/MyBranch已更新)

a--b--c--d--g--h (主,源/主)\\e--f--i-m(源/我的分支)\ j--k--l(MyBranch)

  • git rebase:您将MyBranch重新建立在源/我的分支之上

a--b--c--d--g--h (主,源/主)\\e--f--i-m(源/我的分支)\ j'--k'--l'(MyBranch)

票数 2
EN

Stack Overflow用户

发布于 2014-11-06 15:31:03

在我的本地工作中,我总是使用rebase。我经历过的最糟糕的问题是我合并错误。使用git reflog,我恢复到上次提交,并再次重新建立基础,直到我得到正确的结果。

有几种情况浮现在你的脑海中,当你觉得你必须改变基数或保持谨慎的时候。

  1. 存储库被多个人使用,但不是“受祝福的”存储库。任何时候共享repo时,更改历史几乎总是不好的。也就是说,如果每个人都同意,推动他们当前的工作,你重新建立基础,他们重新设置他们的头(以及其他类似的策略),这是可以做到的,而不会带来痛苦。
  2. 两个分支有一个不同但相似的代码库(一个分支,像macosx / freebsd)。在这种情况下,几乎可以肯定的是,改变OSX.
  3. 的基础是一个坏主意,因为你已经有成千上万的提交了。当使用git reflog修复错误时,重要的是要知道git的旧提交缓存是有限的。如果本地提交足够多,则重新基址可能会使您无法恢复到重新基址之前的提交。

最后一点让我吃了一顿苦头。我也经常使用git rebase -i。我有大约200个提交,我正在仔细地重新排序,分组,并挤压提交,目标是减少到大约10个提交。

大约一周后,我意识到有一个问题,并想与旧的东西进行比较。我尝试过reflog,但最早的提交是在我的rebasing过程中。我很幸运,找到了我做的一个克隆,但在那之后,我学会了更小心地使用rebase。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26768893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档