【问题标题】:git rebase(?) to upstream without merging?git rebase(?) 到上游而不合并?
【发布时间】:2020-03-04 22:20:30
【问题描述】:

(注意:我强烈怀疑我的问题是我不知道要搜索什么术语,我使用的术语和我真正想要的很可能是不同的东西。请不要假设太多很大程度上基于我使用的术语。)

编辑:以下所有内容都是关于远程的。(为了讨论;假设一开始,任何地方都不存在本地客户端,一旦我完成,任何本地客户端创建的客户端将被删除。)

我创建了一个分支,创建了一个 PR,它被合并到上游,我尝试了一个变基。但是现在当我查看我打算继续使用的分支(例如 master)时,它们显示为上游/master 和我在 fork 中所做的东西的合并,尽管没有来自上游的更改.

我想要的是让我的 fork 的 master 在 GitHub 上查看时反映现实并显示其历史中只有上游/master。那就是:

如果我不介意丢失其余的历史记录,我可以通过删除整个存储库并重新开始来完成此操作,但对于这样一个例行且必要的操作来说,这似乎相当激烈(这不会起作用 完全如果我还有其他正在工作的分支机构)。

【问题讨论】:

  • 我不清楚您是否希望在远程 master 之上应用本地 master 分支中的更改,或者您是否只是希望您的 master 成为和遥控器一样。前者可能很复杂,具体取决于您所处的确切状态。后者只是重置:git reset upstream/master
  • origin/master中所有文件的当前内容与upstream/master相同。 -- 当我尝试git reset upstream/master ; git push origin master 时,我得到“更新被拒绝,因为你当前分支的尖端落后于它的远程分支。”
  • 你可以通过强制推送来解决这个问题,但你可能不应该这样做,除非你是唯一一个在你的叉子上工作的人。

标签: git git-rebase git-fork


【解决方案1】:

我想要的是让我的 fork 的主人,当在 GitHub 上查看时,反映现实并显示其历史中只有上游/主人

如果我理解正确,那不是现实。你的 fork 的历史从你创建 fork 的那一点开始,而不是从远程 master 所在的位置开始。您的 fork 将永远与远程并行运行,并根据需要进行前向/后向合并。

当我 git reset upstream/master ; git push origin master 时,我收到“更新被拒绝,因为您当前分支的尖端落后于其远程分支。”

简短的回答是,您可以使用git push origin master -f 完成您想要的事情,有效地杀死您的分叉的历史,并扰乱可能在您的分叉上工作的其他人。

您所描述的听起来更像是您直接在遥控器上的贡献者所拥有的工作流程,为每个功能创建一个新分支。

我对上下文的理解:

Top 是一个典型的 fork 工作流程,bottom 是您作为远程贡献者开发独立功能分支时所遵循的工作流程。 在合并到远程之后,红色是分叉主节点上的(完全有效的)提交。

【讨论】:

  • 您的图表正是我所期望的。 --要反映的现实是,我将创建多个“工作项”,其中每个人的历史都从上游/主历史中的某个点开始(并且该起点不会从我的回购)。我希望这些工作项将相互依赖,但只能通过上游。 ——但是怎么做呢?也许有一个只使用命名分支并且 master 被永久忽略的 repo (stackoverflow.com/questions/4410091)?或者也许 master 根本不存在?
  • github.com/github/hub/issues/1553 恐怕在 github 上做你想做的事是不可能的。在 github 之外,您只需在存储库中创建分支,而不必处理分叉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2018-07-15
  • 1970-01-01
  • 2011-12-16
  • 2021-08-18
相关资源
最近更新 更多