【问题标题】:rebase branch from remote从远程变基分支
【发布时间】:2021-05-26 17:01:45
【问题描述】:

GitHub上有一个项目,有2个分支:

upstream/Master
upstream/stable-v1

我分叉了这个项目,所以现在我在我的私人 github 帐户中拥有:

origin/Master
origin/stable-v1

我使用 SSH 将项目下载到我的本地 mac,所以现在在我的 mac 中我有:

Master  origin/Master
stable-v1 origin/stable-v1

要同步我的本地和主人的来源:

git checkout master
git fetch --all
git reset --hard upstream/master
git push --force

但是这个同步只有master。我还想同步stable-v1,问题是这个分支需要从upstream/stable-v1同步,而不是从master同步!

当我这样做时:

git checkout stable-v1
git pull --rebase

它告诉我

Already up to date.
Current branch stable-v1 is up to date.

但这不是真的,我落后了 1000 多个提交。

我也尝试过使用 Pycharm VCS 选项https://www.jetbrains.com/help/pycharm/sync-with-a-remote-repository.html#update-git-branch 但没有任何效果。

我认为它尝试从源同步我的本地副本,但我想做的是从上游同步本地副本,然后将其推送到源。 或者有没有办法先同步原点,然后将其拉到本地? 我在这里很困惑。

【问题讨论】:

  • 当您执行 git pull 时,它将采用默认远程 (origin)。如果upstream 包含额外的提交,那么这些不会自动在origin 中。
  • 我不得不承认,我有点困惑这个问题与您的其他问题How to sync git branch with remote branch 有何不同?基本上是一样的,但是你已经将“merged”切换为“rebase”。我认为前面的答案仍然适用。

标签: git pycharm


【解决方案1】:

我首选的使用遥控器的方式是永远不要使用pull,而是始终使用fetch,后跟merge/rebasepull 在幕后做同样的事情,但我希望能够在此之前检查历史。

从所有远程获取,检查你的分支,重新设置你的分支:

git fetch --all
git checkout stable-v1
git rebase upstream/stable-v1

rebase 通常具有--onto A B C 的形式,它接受所有可从C 访问但不能从B 访问的提交(有人可能会说“将所有提交从B 带到C”,但这是不准确的)并复制它转到A

存在速记:

  • rebase --onto A A B == rebase A B
  • rebase A current-branch == rebase A

【讨论】:

  • @sony 你确定这个分支存在于遥控器中吗? git branch -r 是否列出了这个分支? (或git branch -r --list 'upstream*'
  • 很好,这解决了我的本地副本就像上游一样,但是起源呢?
  • “原产地”是什么意思?要在远程更新 refs,您需要推送 refs。
  • Git Book 是一个很棒的资源。 Working with Remotes 应该涵盖所有常见用例。
  • 我的previous answer 对您之前的问题已经介绍了如何推送到特定的遥控器。
猜你喜欢
  • 2021-10-02
  • 2020-05-22
  • 1970-01-01
  • 2010-10-28
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多