git 变基三个存储库

git rebase three repositories

我有我的本地开发分支 (local/dev)、原始存储库的主分支 (origin/master) 和我的远程开发分支 (remote/dev)。启动时,local/dev 和 remote/dev 同步。

现在我想从 origin/master 获取更改,用我的 local/dev 重新设置基准并将其推送到 remote/dev。

所以我在我的 local/dev 存储库中执行了 git pull --rebase origin master,这似乎工作正常。

但是git statusreturns我这个:

On branch dev
Your branch and 'remote/dev' have diverged,
and have 8 and 5 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
nothing to commit, working tree clean

git push remote dev将导致

To github.com:PascalTurbo/dev.git
 ! [rejected]        logger -> logger (non-fast-forward)
error: failed to push some refs to 'git@github.com:PascalTurbo/dev.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

我该如何解决这个问题?

其实执行git pull --rebase origin master的时候是不行的。让我们通过下图来说明(有两个存储库-local 和 origin,这也用于三个存储库):

  A---B---C  local/dev, origin/dev
 /         
D---E---F---G  origin/master

git pull --rebase origin master

之后
  A---B---C  origin/dev
 /         
D---E---F---G---A’---B’---C’  local/dev
            |
       origin/master

所以真的是local/dev和remote/dev分道扬镳,并不是你真正想要的。 有一种方法可以让你实现你的需求:

  1. 将本地存储库恢复为远程。

git fetch remote git reset --hard remote/dev git pull origin

  1. 将 origin/master 更改放在 local/dev 分支的顶部。

git checkout master git rebase dev git checkout dev git merge master

  1. 删除未使用的更改。 git branch –D master
  2. 将 local/dev 分支上的更改推送到 remote/dev。

git checkout dev git push remote dev