gpt4 book ai didi

git - 如何强制进行真正的 Git merge ,以便即使文件相同,也可以从分支到 master 绘制一条线?

转载 作者:太空狗 更新时间:2023-10-29 14:00:41 26 4
gpt4 key购买 nike

我做了一个从分支 xyz 到 master 的 merge ,涉及大约 20 个文件,没有冲突。不幸的是,我不记得我使用了哪些选项,但无论我做了什么,生成的代码都是所需的代码但没有从分支 xyz 到 master 画线。我想要从 xyz 到 master 的那一行,这样人们就可以从提交图中清楚地看到 merge 发生了。我在 master 上有一个新节点,而不是从分支 xyz 到 master 的一行,就好像我在 master 分支上创建/编辑这些文件,而不是它们来自分支 xyz。

我尝试使用“正确”选项再次进行 merge ,这些选项导致从 xyz 到 master 绘制线,但 Git 现在告诉我一切都“已经是最新的”,这在技术上是正确的。在其他 SCM 工具中,我已经能够强制 merge (即使文件相同)和/或从一个分支到另一个分支画一条线。

当两个分支之间的文件相同时,添加 merge 行的最佳 Git 技术有哪些?或者对此进行第二次尝试的最佳想法?

更新:不幸的是,我已将我的更改推送到我的开发人员同事从中提取的中央存储库,因此执行“tbekolay”建议的硬重置不太可能解决我的问题。

最佳答案

您正在寻找的 merge 选项是 --no-ff(参见 git merge man page)。

您之前解决的 merge 是快进 merge ,这意味着它只是将您的分支粘贴到 master 之上,没有 merge 提交。由于您希望分支的历史存在,因此您希望明确包含该 merge 提交。要做到这一点,而不是

git merge xyz

你会做

git merge xyz --no-ff

这会给你想要的行为。

如果你还没有推送

如果您没有将您的更改推送给其他任何人,那么您可以通过将 master 硬重置为 merge 前的状态,然后使用 --no-ff 进行 merge 来彻底解决此问题.

为此,假设您还没有删除分支 xyz,首先找到 merge 之前的最后一次提交

git log

复制它的散列,然后做

git reset --hard <commit_hash>

然后终于

git merge xyz --no--ff

如果你已经推送了

如果您已经推送但非常坚决地恢复 xyz 被 merge 的历史记录,您仍然可以实现这一点,但解决方案不是很干净,并且可能更容易接受快进 merge 。

但是,如果你想这样做,再次修改 merge 之前的最后一次提交

git log

复制它的散列,然后做

git revert <commit_hash>..master

这将为分支中的每个提交进行一次提交,而该分支恰好反转该提交。这有点丑陋;你可以通过将所有这些提交压缩成一个单一的反向提交来让它稍微不那么难看

git rebase -i origin/master

假设您没有在这些步骤之间偷偷使用 git push。这将打开一个编辑器,您可以在其中选择第一个提交,并将所有其他提交压缩到第一个提交中。您可能希望在末尾编辑提交消息,使其类似于Reverting fast-forward merge of xyz

您的存储库现在处于快进 merge 之前的状态。它有 merge 的历史,你可以恢复那个 merge 。此时,您可以

git merge xyz --no-ff

你会得到一个 merge 提交。具有讽刺意味的是,由于 master 发生了一些变化,即使您不使用 --no-ff,您现在也将获得非快进 merge ,但是由于这是您喜欢的工作流程,您不妨养成总是与 --no-ff merge 的习惯。

关于git - 如何强制进行真正的 Git merge ,以便即使文件相同,也可以从分支到 master 绘制一条线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19237640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com