【问题标题】:Where does this rebase come from?这个rebase来自哪里?
【发布时间】:2021-11-14 18:43:08
【问题描述】:

我最近在本地创建了一个新分支,将其发布到远程,它收到了同事的更新。 虽然我的存储库中确实有更改,但它们都没有在已修改的文件上。 因此,我希望 git pull 会像来自 git status 的消息所暗示的那样工作:

$ git status
On branch XXX
Your branch is behind 'origin/XXX' by 2 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   ...

但是,拉取会导致一条错误消息,暗示正在进行变基:

$ git pull
error: cannot pull with rebase: You have unstaged changes.
error: please commit or stash them.

我不知道这可能来自哪里,因为我从未有意识地进行过 rebase。 另外,奇怪的是:

$ git rebase --continue
fatal: No rebase in progress?

我可以在存储我的更改时拉取它们,然后毫无问题地弹出它们,并且知道自动存储选项,但我想了解这里发生了什么。

变基从何而来? 为什么 git pull 和 git rebase 似乎不同意是否存在变基? 我该如何收拾这个烂摊子?

【问题讨论】:

    标签: git git-rebase git-pull git-stash


    【解决方案1】:

    rebase 是从哪里来的?

    作为@coyotte508 pointed out,您可能已将git pull 配置为通过在您的Git 配置文件(全局或当前存储库)中设置pull.rebase 选项来执行rebase 而不是合并。

    为什么 git pull 和 git rebase 似乎不同意是否存在 rebase?

    他们没有。 git pull 只是拒绝执行变基,因为您在工作目录中有未提交的更改。到 git pull 退出时,没有正在进行的变基。

    我该如何收拾这个烂摊子?

    您可以在执行git pull 之前提交或存储您的更改(您提到的rebase.autostash 选项将自动为您执行后者)。或者,您可以将pull.rebase 设置为false 并让git pull 进行常规合并,但I wouldn't recommend it

    【讨论】:

      【解决方案2】:

      你可能在拉取时自动启用了 rebase。试试

      git config pull.rebase
      git config --global pull.rebase
      

      查看是否是true。如果是这种情况,您可以这样做:

      git config pull.rebase false
      git config --global pull.rebase false
      

      (或使用--unset

      【讨论】:

        猜你喜欢
        • 2017-06-04
        • 1970-01-01
        • 2013-03-13
        • 1970-01-01
        • 2016-01-01
        • 2018-05-26
        • 2016-08-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多