【问题标题】:git merge discards new changes without conflictgit merge 丢弃没有冲突的新更改
【发布时间】:2019-01-11 05:23:28
【问题描述】:

我的团队有时会遇到非常奇怪的问题。
让我用图片来描述它:

假设我们有两个具有相同基本提交“commit 1”的分支。
现在,在“提交 2”中,有人在文件 X.txt 中添加了新行。
在“提交 3”中,有人添加了行文件 Y.txt。

之后有更多的提交,更多的分支,最后我们合并了这两个分支。像完全正常合并的接缝。

但有时会发生一些奇怪的事情,因为 Git 可以决定丢弃在 Y 文件中的绿色分支中所做的更改,即使该文件在红色分支中完全没有更改。
有时它甚至会删除已添加到绿色分支但未添加到红色分支的文件。

我很困惑,我不知道为什么会这样。
我们正在使用 SourceTree,项目在 Unity 中。

如有任何想法,我将不胜感激;-)。

【问题讨论】:

  • 请创建一个minimal reproducible example。这不应该在正常使用下发生。除非你从另一个分支中挑选提交,或者在两个分支上创建一个同名的文件。
  • 嗯,问题是很难给出这样的例子,因为它是随机发生的(至少在我的观察中)。而且我们有相当扩展的树,我不知道如何复制它。我们最近没有使用 cherypiciking,所以这不是原因。
  • git log --full-history 显示的输出是否与普通的git log 不同?如果是这样,那么有人进行了合并并丢弃了这些更改,可能是通过git merge -sours
  • git log 和 git log --full-history 的输出是完全一样的。另外,我的团队使用 sourcetree 的图形 UI,没有人会手动使用 git merge -sours。是否有可能 sourcetree 有时会更改为该合并策略?我找不到任何方法来更改 sourcetree 的合并策略,也许我遗漏了一些东西。

标签: git merge git-merge conflict atlassian-sourcetree


【解决方案1】:

但有时会发生一些奇怪的事情,因为 git 可以决定丢弃在 Y 文件中的绿色分支中所做的更改,即使该文件在红色分支中完全没有更改。

有时它甚至会删除已添加到绿色分支但未添加到红色分支的文件。

取决于合并方向:合并中哪个是源分支,哪个是目标分支?

  • 如果将红色合并为绿色(git checkout greengit merge red),则以绿色修改但未以红色修改的文件将保持不变。
    可以删除以绿色添加但以红色视为已删除的文件。
  • 如果将绿色合并为红色(git checkout redgit merge green),则不会发生同样的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2019-01-14
    • 2015-03-08
    • 2015-11-14
    • 2018-05-28
    • 2019-11-16
    • 1970-01-01
    相关资源
    最近更新 更多