Rebase 拉取的分支尚未被回购所有者合并
Rebase pulled branch which has not been merged by repo owner
我在 Github 上创建了一个项目。我已经将我的 fork 的本地版本设置为通过 adding it as upstream.
从原始 repo 更新
现在我创建了一个功能分支,进行了更改并拉到了原始仓库。由于变化巨大,拉动尚未(尚未)被回购所有者接受。
与此同时,我从原始回购的 master 更新了我的 master 分支 git pull upstream master
几次,所以我的功能分支与 master 分支不同步。
我需要同步它们,因为我需要从两个分支生成文档并进行比较。
我所知道的(我不是 git 专业人士)是我会首先在本地提交我在我的功能分支中隐藏的更改,然后,也在本地,将我的分支重新设置为 master 分支(或者这是怎么回事用 git 语言调用。
但我读到变基会在其他人的存储库中造成混乱。
那我该怎么做呢?我应该关闭我的 PR,在一个新的分支上做 rebase 并再次拉动它吗?我想如果我能阻止这个,因为我不想污染原来的回购协议。
在许多 git 工作流程中,您可以区分功能分支和 "stable" 分支。
以这个例子为例(任意工作流程,可能与您的不同,但只是为了说明 stable/feature 个分支) 并考虑其历史:
-----------------D <<< feature-bar
/ \
---A------------E-------H---J <<< master
\ / \ /
B--------C F---G---I <<< feature-foo
master
是一个稳定的分支,它是永久的并且反映了应用程序的当前状态。在某些工作流程中,您有更多稳定的分支,一个用于暂存,一个用于开发,一个用于稳定生产状态,等等。
另一方面,功能分支是易变的和一次性的。每一个都是为特定需求而创建的(通常是错误修复、新功能),并在最终合并到其稳定目标时被删除。 (在上面的模式中,feature-bar
和feature-foo
,但我们也可以猜测在某个时候有一个分支指向C
,在E
之后被删除了合并。)
当开发人员单独在他们的功能分支上工作时,如果尚未合并,他们在分支上所做的任何事情都会保留在该分支上并且 那 部分历史可以更改,通过变基或任何其他操作,不会对其他任何人产生不良影响。
当然,在大多数情况下,rebase 一个稳定的分支是一个很大的禁忌,因为所有其他开发人员都共享这部分 repo 历史,并且必须解决潜在的严重冲突。
我在我的模式和解释中使用了合并,但是使用 rebase 的工作流也会在 stable/feature 个分支之间做出相同的区分。
如果你单独在一个功能分支上工作,然后创建一个 PR,然后意识到你必须 rebase 它,没关系,PR 会在你完成后自行更新推送了分支的新历史记录,目标分支的历史记录不会乱七八糟。
问题更多的是变基稳定分支,与其他人共享,因为这会导致历史冲突,是的,解决起来很麻烦。
您链接的文章非常有趣,我同意主要观点,但是请注意,当您发现 git 并尝试有效地使用它时,它可能会产生误导。这些是相当高级的考虑因素,如果在没有清晰理解的情况下遵循,可能会导致“cargo-cult”做法。 Rebase 是一个有用的工具,不要扔掉它。
我在 Github 上创建了一个项目。我已经将我的 fork 的本地版本设置为通过 adding it as upstream.
从原始 repo 更新现在我创建了一个功能分支,进行了更改并拉到了原始仓库。由于变化巨大,拉动尚未(尚未)被回购所有者接受。
与此同时,我从原始回购的 master 更新了我的 master 分支 git pull upstream master
几次,所以我的功能分支与 master 分支不同步。
我需要同步它们,因为我需要从两个分支生成文档并进行比较。
我所知道的(我不是 git 专业人士)是我会首先在本地提交我在我的功能分支中隐藏的更改,然后,也在本地,将我的分支重新设置为 master 分支(或者这是怎么回事用 git 语言调用。
但我读到变基会在其他人的存储库中造成混乱。
那我该怎么做呢?我应该关闭我的 PR,在一个新的分支上做 rebase 并再次拉动它吗?我想如果我能阻止这个,因为我不想污染原来的回购协议。
在许多 git 工作流程中,您可以区分功能分支和 "stable" 分支。
以这个例子为例(任意工作流程,可能与您的不同,但只是为了说明 stable/feature 个分支) 并考虑其历史:
-----------------D <<< feature-bar
/ \
---A------------E-------H---J <<< master
\ / \ /
B--------C F---G---I <<< feature-foo
master
是一个稳定的分支,它是永久的并且反映了应用程序的当前状态。在某些工作流程中,您有更多稳定的分支,一个用于暂存,一个用于开发,一个用于稳定生产状态,等等。
另一方面,功能分支是易变的和一次性的。每一个都是为特定需求而创建的(通常是错误修复、新功能),并在最终合并到其稳定目标时被删除。 (在上面的模式中,feature-bar
和feature-foo
,但我们也可以猜测在某个时候有一个分支指向C
,在E
之后被删除了合并。)
当开发人员单独在他们的功能分支上工作时,如果尚未合并,他们在分支上所做的任何事情都会保留在该分支上并且 那 部分历史可以更改,通过变基或任何其他操作,不会对其他任何人产生不良影响。
当然,在大多数情况下,rebase 一个稳定的分支是一个很大的禁忌,因为所有其他开发人员都共享这部分 repo 历史,并且必须解决潜在的严重冲突。
我在我的模式和解释中使用了合并,但是使用 rebase 的工作流也会在 stable/feature 个分支之间做出相同的区分。
如果你单独在一个功能分支上工作,然后创建一个 PR,然后意识到你必须 rebase 它,没关系,PR 会在你完成后自行更新推送了分支的新历史记录,目标分支的历史记录不会乱七八糟。
问题更多的是变基稳定分支,与其他人共享,因为这会导致历史冲突,是的,解决起来很麻烦。
您链接的文章非常有趣,我同意主要观点,但是请注意,当您发现 git 并尝试有效地使用它时,它可能会产生误导。这些是相当高级的考虑因素,如果在没有清晰理解的情况下遵循,可能会导致“cargo-cult”做法。 Rebase 是一个有用的工具,不要扔掉它。