传递分支名称时如何指定fork/remote?例如,当试图在分叉之间变基时?

How to specify fork/remote when passing branch names? For example when trying to rebase between forks?

我正在尝试将我同事的分支中的一个分支变基到我的分支中的同一个分支上,因为他做了一些错误更改并将它们提交到他的分支的分支中,我想在继续之前合并到我的分支中在职的。

我认为你如何从一个分支变基到另一个分支(并且两个分支都在同一个分叉上)是你检查具有你想要的更改的分叉,然后 运行 git rebase <base>,其中 base 是您要变基的分支的名称。

我想我可以做到以下几点:

将我同事的分支添加为远程,运行 git fetch <coworkerFork> 获取他的分支版本,检查该分支,最后 运行 git rebase <x> 其中 x 是我的叉子上我的分支版本的名称。

首先,是否可以这样做?

如果是这样,我该如何指定我的分支?我可以在分支名称前加上分支名称或类似名称吗?

TL;DR

如果您呼叫同事的遥控器 coworkerFork,他们的分支 feature 将被称为 coworkerFork/feature

是的,您所描述的是可能的,并且大致会按照您所说的那样进行,但是您让生活变得比您需要的更艰难。请考虑 cherry-picking 错误修复,将他们的分支合并到您的分支,或将您的分支重新定位到他们的分支。

详情

当您获取 coworkerFork 时,您的沙盒中将有分支 coworkerFork/feature,并且还有 feature 作为您自己的分支,如果该分支可能 origin/feature也存在于 origin。正如您在问题中所说的那样:

git remote add coworkerFork <URL>
git fetch coworkerFork

结帐时 coworkerFork/feature,您将处于分离 HEAD 模式。您可以通过给它一个本地分支名称来让您的生活更轻松。然后你可以在你自己的 feature 分支上重新设置它。

git checkout coworkerFork/feature
git checkout -b coworker-feature
git rebase feature

现在你需要将你自己的功能分支带到这个 rebase 的结果中:

git checkout feature
git merge coworker-feature

此时,您不再需要 coworker-feature 分支:

git branch -d coworker-feature

备选方案

尽管此过程可行,但我会推荐它。除了相当复杂之外,它还会导致您同事的提交全部在 之后 您在该分支上拥有提交,然后您的后续提交在他们之后。如果那是您想要的,那么好吧,继续吧,但这里有三个更简单的解决方案。所有这些都假设只有上面的 git remote addgit fetch 命令,并且您目前在自己的 feature 分支上。

备选方案 1:樱桃采摘

Cherry-pick 仅修复您需要的错误而不是整个分支:

git cherry-pick <sha1 of the bug fix commits you want>

这也会将您同事的提交放在您的提交之后,但不会引入他们的所有工作,只会引入您需要的错误修复。然后当你做你的 PR 时,你不会带来他们所有可能未完成的更改,只有你在修复你需要的错误方面的工作。

备选方案 2:将他们的分支合并到您的分支中

如果您希望您的同事最终按原样 PR coworkerFork/feature 上的提交,最友好的选择可能是将他们的分支合并到您的分支中:

git merge coworkerFork/feature

这将在历史上制造一个泡沫,为您的所作所为留下清晰的痕迹。我个人喜欢那样。不是每个人都这样。

备选方案 3:根据他们的改变你的基础

如果您希望您同事的提交先于您的提交,以便您的工作在他们提交后一起结束,请将您的分支重新设置为他们的分支,而不是相反。同样,在您自己的 feature 分支上,执行:

git rebase coworkerFork/feature

除了为您提供比将他们的分支重新定位到您的分支更好的线性度之外,它也更简单!

希望对您有所帮助!