【问题标题】:Can changes be conflictless overwritten when using git merge with recursive strategy?使用带有递归策略的 git merge 时可以无冲突地覆盖更改吗?
【发布时间】:2018-01-09 05:13:15
【问题描述】:

确切地说,我正在使用 Git (GitLab) 管理我公司的一个项目的源代码。两名开发人员在项目上工作,为每个任务创建一个分支,然后创建一个合并请求。我主要通过 UI 直接合并这些,这应该与在命令行中执行此操作相同:

git checkout master
git merge --no-ff 1224-cool-feature-branch

有时我会看到页面的小功能或部分消失。

考虑以下情况

  • 在 ab12 从 master 分支的 Dev A 分支 -> 新分支名称 FeatureA
  • 在 ab12 从 master 分支 Dev B -> 新分支名称 FeatureB
  • Dev A 更改 foobar.txt 并提交到 FeatureA
  • FeatureA 使用 merge --no-ff 使用默认递归策略合并到 master 中
  • 开发 B 更改 foobar.txt 并提交到功能 B
  • FeatureB 使用 merge --no-ff 合并到 master 中,使用默认的递归策略没有冲突

FeatureAfoobar.txt 的更改是否可能已被覆盖而不会产生冲突?

【问题讨论】:

  • 当你将feature合并到master时,master的代码会发生变化,因为将feature的commits引入master。这就是 merge 默认所做的,按设计工作。
  • 如果问题是:如果两个分支都没有改变某个文件,合并会改变它吗?那么答案是否定的,除非有人在合并过程中手动更改该文件。
  • 如果您专注于您认为已经消失的一项特定功能并找出其原因,它会更具建设性。您可以通过命令git show <commit>:<path> 来检查文件的每个提交内容
  • 我用一个导致观察到的行为的工作流示例完全改写了我的问题。 @max630 我正在寻找功能,但找不到一个我确定是由这个引起的。如果我这样做了,我会使用git loggit show 来找出答案

标签: git merge gitlab


【解决方案1】:

我相信答案是“不”。该文件使用传统的3 way merge 合并,如果它们彼此足够远或报告冲突,则应该应用更改,没有其他选项。

这种方法可能存在一些问题,例如参见 http://r6.ca/blog/20110416T204742Z.html ,但我无法想象任何极端情况会如何导致静默编辑反转。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-12
    • 2019-01-11
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多