无法跨分叉执行拉取请求,那么如何获取我的更改?

Cant do a pull request across forks so how do I get my changes in?

所以我是 Git 的新手,因此我的很多术语可能不在这里

  1. 所以有一个主存储库,我们称之为 "Mainline"
  2. 我和我的队友 fork Mainline 独立开发功能。让我们称这些为 "teammatefork" 和 "myfork"
  3. 有时我们会在我们的分叉上执行拉取请求以将我们的更改添加到 Mainline
  4. 最近我向 "myfork" 添加了一堆代码,这些代码本质上是构建测试工具的代码。我们决定再次将 "Mainline" 分叉到 "TestHarness" 以提交这些东西
  5. 我刚刚意识到我无法在 "myfork" 上执行拉取请求以将更改合并到 "TestHarness"

在这里做 'rebase' 正确吗? - 我不太确定,但听起来不错。本质上,我想将我的更改从 myfork 转移到 TestHarness 分支中,这两个都是 Mainline

的分支

然后我想将 2 个修订版返回到我的叉子上,所以我回到了添加测试工具代码之前的起点

有人可以指出执行此操作需要什么 git 魔法吗?

如果我正确理解问题,你有 4 个存储库:

  • "Mainline"
  • "MyFork"
  • "TeammateFork"
  • "TestHarness"

您在 "MyFork" 上有要 "move over" 到 "TestHarness" 的提交。

首先,您可能需要重新考虑处理分叉的方式。您的 TestHarness 更改是否大到需要新存储库?

如果你确定要继续你的道路,我想我会这样做:

我会先去您的 "TestHarness" 存储库并将您的 "MyFork" 添加为远程存储库并获取其数据:

git remote add myfork myfork_url
git fetch myfork

然后我会 cherry pick 你的 "MyFork" 存储库中的两个提交:

git cherry-pick commit_1_hash
git cherry-pick commit_2_hash

现在您的 "TestHarness" 分叉上应该有两个提交。

回到你的"MyFork"然后向后移动两步如下:

git reset --hard HEAD~2

请注意,这将永久删除您在 "MyFork" 分叉上的更改。如果你想保留它们,你可以删除 --hard

如果您想查看存储库的当前状态,请随时尝试

git log --graph --decorate --all