我一直在从旧分支创建新的 Git 分支,而没有向 master 签出

I have been creating new Git branches from older branch without checking out to the master

我一直在从旧分支检出到新分支,而不是检出到主分支。 目前,我创建了四个新功能:home_feature、admin_user-feature、customer_request、blog_feature.

我忘记在创建 "customer_request" 分支之前向 master 签出,并通过移动到博客功能来创建该功能。 现在我面临很多冲突。我试过使用 'git rebase' 但每个分支最多提交 80 次,所以它不实用。 我该如何解决这些冲突?

您可以进行一次合并并修复冲突,而不是像使用变基那样可能需要多次。

或者您可以让 Git 在发生冲突时自动选择您的更改或大师的更改。

例如,如果您进行变基,则可以将 ours(或 theirs)选项添加到递归合并策略中。

例如,以下命令会将您的分支重新设置在 master 之上,对于任何冲突,它将选择 您的 更改而不是来自 master 的更改:

git rebase master -Xtheirs

theirsours 在这种情况下有点违反直觉。 -Xtheirs 将选择您的更改,-Xours 将从主那里选择更改。

从评论来看,这似乎是解决方案。你有三个分支:

  • 硕士(男)
  • 旧功能分支 (O)
  • 新功能分支 (N)

N 是意外地从 O 分支出来的,而不是 M,这是你想要的。这意味着在 N 中的某个时间点开始有一系列提交,并且您想使用这些提交重新创建分支,就像您从 M 分支一样。

解决方案是创建一个新分支:

  • 较新的功能分支(M 中的 N2)

然后从 N 中识别出一系列提交哈希,并将它们应用于 N2。您可以通过依次挑选每一个来手动完成此操作。

存在这些无法完全应用的风险,因为与 O 相比,M 可能更改了一些文件,因此您在 N 中的工作将基于过时的 files/folders。文本更改合并是一个相当简单的算法,它不像人类那样理解代码结构(换句话说,不是所有的东西都是可合并的)。

然而,事实证明,樱桃采摘应用得很干净。如果您无法做到这一点,您可能不得不为每个失败的差异创建一个差异,并查看如何在 M 发生变化的情况下手动将其应用到 N2。发生这种情况时,仍然值得尝试 cherry-选择以下提交,因为它们可能并不都需要手动解决冲突。