Git:如何构建存储库以便我可以在不收到 "already up to date" 消息的情况下变基

Git: How to structure repositories so I can rebase without getting "already up to date" messages

几年前,我从事开源 github 项目 - 我克隆了该项目,当我有东西要提交时,我提出了拉取请求。当我想从主项目中获取最新的东西时,我做了一个 merge/rebase - 至少我记得是这样。

现在我有了自己的网络服务器,我想在上面重新创建完全相同的工作流程,但它似乎不起作用 - 这就是我的意思:

  1. 开发人员 A 和 B 正在进行一些更改。
  2. 开发人员 B 提交他的更改,创建拉取请求。
  3. 维护者接受拉取请求。
  4. 开发人员 A 继续工作
  5. Dev A 完成他的更改,提交
  6. Dev A 变基以从 master 获取 B 的更改
  7. 开发人员 A 创建拉取请求。

第 6 步 - 变基 - 对我不起作用。我不断收到 "already up to date" 条消息,但我不明白为什么。

我希望获得有关如何设置存储库、如何拉取更改以及如何变基的分步指南。 None 的在线指南或其他 Whosebug 问题已经能够解释我做错了什么。

我使用以下 git 命令进行上述设置,如果您发现错误,请指出:

  1. 我使用 git init nighly 创建存储库 - 这成为集成存储库
  2. 我将现有代码复制到集成代表中,执行 git add --all 并提交
  3. 我克隆到 repo dev-a 和 dev-b
  4. 拉取更改时,我转到集成仓库并执行“git pull dev-a master
  5. 之后我进入 repo dev-b 并执行 git remote updategit rebase master - 但它说 "Current branch master is up to date.".

如果您在本地存储库上工作,您可以 git pullgit rebase 对远程存储库进行变基/拉取/合并您的远程存储库更改到您的工作树中。

但是,您不能使用 git rebase 命令将更改推送到远程。为了将本地存储库中的更改推送到远程存储库,您必须使用命令 git push {remote}git push {ssh / https url}

但是,如果您登录到另一台机器并在本地使用这些其他 'remote' 存储库之一,您应该能够使用 git rebasegit pull 命令就像您在第一台机器上一样。

考虑在发出 rebase 命令之前更新您的遥控器。 git 报告 'already up to date' 因为它不知道遥控器上的更新更改。使用以下命令:

git remote update

在尝试使用 git rebase

之前

作为替代方案,您可以 git pull --rebase 而不是 git rebase,这应该可以处理缺少的更新遥控器的步骤。

我相信我成功了。

我这样设置存储库:

  1. git init integration(集成存储库)
  2. cp -r existing-source-dir/* integration/(删除了 existing-source-dir 中旧的 .git 目录,因此 git 不会混淆)
  3. cd integration
  4. git add --all
  5. git commit
  6. cd..
  7. git clone nightly dev-a
  8. git clone nightly dev-b

每当开发流中的更改准备就绪时,我都会执行以下操作:

  1. cd dev-a
  2. git commit(当然,我确保添加了所有相关更改,并首先丢弃其他所有内容)
  3. git remote update && git rebase origin master
  4. cd ../integration
  5. git pull dev-a master

这似乎有效。

如果我在变基时没有指定 "origin" 远程,变基将失败并显示 "Current branch master is up to date"。