1

我不确定这是我们面临的 Git 还是 IntelliJ 问题。假设在 IntelliJ 中使用 Git 集成:

  1. 用户 A 更改文本文件并提交并将此更改推送到分支branch1

  2. 用户 B 更改相同的文本文件但在不同的行中并提交到branch1

  3. 用户 B 获取远程仓库并将远程分支 1合并到本地分支 1

当前行为:它合并没有任何冲突(因为不同的行?)

想要的行为:弹出冲突解决窗口,用户必须决定是否应用所有无冲突的更改。

但为什么你可能想要这种行为?:有时我们在处理标记或 js 文件时遇到问题,其中一位开发人员更改了顶部的某些内容(例如删除了未使用的功能),而另一位开发人员则依赖于此。如果您想了解这些中断,则必须进行非常昂贵的 ui 测试。特别是如果它只是标记(例如 jsf 标签、参数)

4

2 回答 2

3

我不确定这是否是您想要的,但是即使没有冲突,您也可以使用该命令的--no-commit选项来假装合并失败。git merge从手册:

With --no-commit perform the merge but pretend the merge failed
and do not autocommit, to give the user a chance to inspect and
further tweak the merge result before committing.

然后,您可以使用git diffwith--cached选项检查更改以检查合并的结果;并使用带有选项的git checkout--ours--theirs接受或拒绝合并引入的更改。

于 2014-07-08T09:14:49.513 回答
1

这似乎是你想要的一种奇怪的行为。通过您的最后一次编辑,我明白了您想要的原因,但我认为您想使用一种工具来解决与工具本身无关的问题。

我没有直接的答案,我什至认为没有强制合并审查的选项。但是,您可以开发一个合并过程,在该过程中您要求您的同事在合并之前进行比较。所以基本上:

  1. 在本地计算机上进行更改
  2. git diff REMOTE/BRANCH -- files
  3. 要求开发人员检查更改
  4. 如果一切如期进行,提交并推送更改。否则,撤消不需要的更改,并从 2 开始重复。

正如你所看到的,这个过程变得非常笨拙和缓慢,而且很容易出错(如果我删除一行,我通常知道我要删除什么,如果没有测试被破坏,我可能会被要求检查删除数百次,并且仍然保留它)。

到目前为止,这是我能够建议您的唯一帮助,如果您找到任何以更直接的方式实现目标的方法,请评论此答案,或提供您自己的解决方案,我总是很高兴学到新东西!

于 2014-07-04T07:38:21.470 回答