通过rebase保持远程存储库同步

时间:2009-08-19 21:38:36

标签: git branch rebase

我有一种情况,我必须将主题分支重新绑定到主人。这很好,这是正常的rebase案例并且效果很好。

复杂的是当我试图让这个进程在一个裸的远程存储库上同步时。

e.g。

o--o--o origin/master
       \
        o--o origin/topic

o--o--o clone/master - tracking origin/master
       \
        o--o clone/topic - tracking origin/topic

现在我提交克隆/主控,我推送到origin / master,到目前为止一直很好。

o--o--o--n origin/master
       \
        o--o origin/topic

o--o--o--n clone/master - tracking origin/master
       \
        o--o clone/topic - tracking origin/topic

这是我想要结束的地方:

o--o--o--n origin/master
          \
           o--o origin/topic

o--o--o--n clone/master - tracking origin/master
          \
           o--o clone/topic - tracking origin/topic

我似乎无法到达那里,请帮忙。

工作流程为:

  1. 克隆裸露的远程原点
  2. 对clone / master进行更改
  3. 将更改推送到origin / master
  4. 将基础克隆/主题重新定位到源或克隆主机 - 似乎没有太大的区别
  5. 现在我希望origin / topic能够反映rebase,所以我想推送但是首先我必须拉动以使clone / topic快进,然后我最终得到一个包含来自clone的所有原始提交的合并/ topic包含来自origin / topic的所有提交。

2 个答案:

答案 0 :(得分:3)

为了避免push -mirror,我会略微修改你的工作流程。

  1. git clone / path / to / origin#克隆主人
  2. git checkout --track origin / topic
  3. git checkout master
  4. git add some_new_file; git commit -m“添加了一些新文件”
  5. git push origin / master
  6. git checkout主题#Local branch
  7. git rebase master
  8. git push origin master #it将更新master on origin
  9. git push --force origin / topic:它将更新关于origin的主题
  10. 您需要--force,因为origin / topic会更改祖先,并且您已禁用快进检查。

答案 1 :(得分:0)

显然答案是推送--mirror标志。所以现在的工作流程是:

  1. git clone / path / to / origin#克隆主人
  2. git checkout --track origin / topic
  3. git checkout master
  4. git add some_new_file; git commit -m“添加了一些新文件”
  5. git push origin / master
  6. git checkout主题#Local branch
  7. git rebase master
  8. git push --mirror origin #This是我错的一步,只是定期推送不够好

另请注意,除了我自己,我不会与任何人共享远程回购,否则对其他开发者来说,改变是不公平的。