当前位置: 首页 > 知识库问答 >
问题:

合并时,Git是否只考虑提交的时间戳而不考虑它属于哪个分支?

家弘业
2023-03-14

我在Git中有两个主要分支:masterdev
我的分支的结构如下:

B-->E-->F-->G (master branch)

B-->C-->D-->H-->I-->J-->K (dev branch)

在我执行合并之前,masterdev在提交EFG的master中有一个共同的父级B
,我删除了一些文件(比如foobar)当它们仍然存在于dev分支中的提交C中时,它们不正确。
因此,当我通过创建提交L来执行三方合并以加入GK时,L不再包含foo和bar!Git没有以任何方式通知我他们失踪的消息。

在我看来,因为EFG只是在提交C之后重新播放,因此foobar都消失了。

Git合并的这种行为对我来说很奇怪。因为如果有人从另一个分支删除了一些文件,我将无法知道。
合并时,是否至少应该通知我任何冲突的修改?

共有1个答案

微生昌胤
2023-03-14

合并时是否至少应该通知我任何冲突的修改?

在这种情况下,否:将dev合并到master会报告从dev(自共同祖先B)到master)的修改,这里foo和bar没有在dev中修改,因为B。自B以来,它们在master中被删除。没有冲突(如果foobar未在dev中修改):这两个文件与合并无关(不适用于dev),并且在master中保持不变(表示已删除)。

您可以使用以下工具预览合并:

git checkout master
git diff  --name-status dev

这将列出删除的文件。

您能给我一些关于Git如何决定在合并过程中重播哪些提交的建议吗?

Git在合并时(只有当重新创建时)不会“重放”:它只考虑两个分支头(和共同祖先)。

Git创建一个新的快照,该快照由三方合并产生,并自动创建一个指向它的新提交。这称为合并提交,其特殊之处在于它有多个父级。

 类似资料:
  • 我观察到每次发出“编译”任务时,SBT都会编译所有源文件,而不管上次编译后的时间戳如何。以下是我的build.sbt文件: 以下是我的项目结构(忽略的项目和目标目录): 出于测试目的,这两个源文件只是空的对象定义。 当我输入“sbt编译”时,我得到了以下信息: 我可以在目标目录中找到新编译的类文件。 没有修改任何源文件,一分钟后,再次键入“sbt compile”,我得到了相同的信息和类文件,只是

  • 有没有一个时区,我可以使用,以考虑到夏令时?我知道'EDT'是指夏令时,而'EST'不是。是否有一个时区我可以使用,将自动检测日期时间是否是夏令时?“ET”或“America/New_York”能行吗? 编辑:: 抱歉应该更清楚。我想取一个日期并将其转换为东部时区,但我希望它考虑到东部时区的日期是否为夏令时。

  • 我正在尝试Flink对从CSV文件加载的(排序的)时间戳事件进行基本聚合。 我告诉Flink使用活动时间: 然后我在KeyedStream上使用一个时间窗口 问题是,将窗口更改为10分钟实际上会在该时间过后打印结果! 我的理解是,通过明确告诉Flink使用时间戳字段作为事件时间,操作将不依赖于机器上的实时性。我错过什么了吗?

  • 我已经为我们的生产过程创建了一个离散模拟模型,其中应模拟来年的产能、产量等。该模型可行,但我在测量过程时间方面有问题。我们的生产时间仅为上午7点至下午3点。是否有办法设置TimeMeasureStart和TimeMeasureEnd块,以便仅在轮班期间测量时间? 作为TimeMeasureStart、服务和TimeMeasureEnd块的简化示例: 代理在下午2:30通过TimeMeasureSt

  • 在java编程中,什么时候需要考虑并发编程来保证线程安全性。还没深入了解这块,在编程时一直很犹豫。