我一直在从旧分支创建新的 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
theirs
和 ours
在这种情况下有点违反直觉。 -Xtheirs
将选择您的更改,-Xours
将从主那里选择更改。
从评论来看,这似乎是解决方案。你有三个分支:
- 硕士(男)
- 旧功能分支 (O)
- 新功能分支 (N)
N 是意外地从 O 分支出来的,而不是 M,这是你想要的。这意味着在 N 中的某个时间点开始有一系列提交,并且您想使用这些提交重新创建分支,就像您从 M 分支一样。
解决方案是创建一个新分支:
- 较新的功能分支(M 中的 N2)
然后从 N 中识别出一系列提交哈希,并将它们应用于 N2。您可以通过依次挑选每一个来手动完成此操作。
存在这些无法完全应用的风险,因为与 O 相比,M 可能更改了一些文件,因此您在 N 中的工作将基于过时的 files/folders。文本更改合并是一个相当简单的算法,它不像人类那样理解代码结构(换句话说,不是所有的东西都是可合并的)。
然而,事实证明,樱桃采摘应用得很干净。如果您无法做到这一点,您可能不得不为每个失败的差异创建一个差异,并查看如何在 M 发生变化的情况下手动将其应用到 N2。发生这种情况时,仍然值得尝试 cherry-选择以下提交,因为它们可能并不都需要手动解决冲突。
我一直在从旧分支检出到新分支,而不是检出到主分支。 目前,我创建了四个新功能:home_feature、admin_user-feature、customer_request、blog_feature.
我忘记在创建 "customer_request" 分支之前向 master 签出,并通过移动到博客功能来创建该功能。 现在我面临很多冲突。我试过使用 'git rebase' 但每个分支最多提交 80 次,所以它不实用。 我该如何解决这些冲突?
您可以进行一次合并并修复冲突,而不是像使用变基那样可能需要多次。
或者您可以让 Git 在发生冲突时自动选择您的更改或大师的更改。
例如,如果您进行变基,则可以将 ours
(或 theirs
)选项添加到递归合并策略中。
例如,以下命令会将您的分支重新设置在 master 之上,对于任何冲突,它将选择 您的 更改而不是来自 master 的更改:
git rebase master -Xtheirs
theirs
和 ours
在这种情况下有点违反直觉。 -Xtheirs
将选择您的更改,-Xours
将从主那里选择更改。
从评论来看,这似乎是解决方案。你有三个分支:
- 硕士(男)
- 旧功能分支 (O)
- 新功能分支 (N)
N 是意外地从 O 分支出来的,而不是 M,这是你想要的。这意味着在 N 中的某个时间点开始有一系列提交,并且您想使用这些提交重新创建分支,就像您从 M 分支一样。
解决方案是创建一个新分支:
- 较新的功能分支(M 中的 N2)
然后从 N 中识别出一系列提交哈希,并将它们应用于 N2。您可以通过依次挑选每一个来手动完成此操作。
存在这些无法完全应用的风险,因为与 O 相比,M 可能更改了一些文件,因此您在 N 中的工作将基于过时的 files/folders。文本更改合并是一个相当简单的算法,它不像人类那样理解代码结构(换句话说,不是所有的东西都是可合并的)。
然而,事实证明,樱桃采摘应用得很干净。如果您无法做到这一点,您可能不得不为每个失败的差异创建一个差异,并查看如何在 M 发生变化的情况下手动将其应用到 N2。发生这种情况时,仍然值得尝试 cherry-选择以下提交,因为它们可能并不都需要手动解决冲突。