合并时从存储库中删除文件会使它们消失

Removing files from repository while merging makes them disappear

这是一个演示问题的测试仓库:https://bitbucket.org/vektor330/bugtest

事件的顺序是这样的:

  1. 添加一些初始提交。
  2. A 将 Conflictsource 添加到 develop
  3. B 将 Conflict 添加到 master
  4. B 将 develop 合并到 master,使用 "mine" 策略解决 Conflict 上的冲突,并从存储库中删除 source。现在这是一个空提交,但可以提交并推回远程。

结果是:source 已从存储库中完全消失。出现在7dfa23e,repo里有它出现的日志,然后悄悄消失在5080a24,无影无踪

我希望提交 5080a24 显示“source 已删除”,Git 或我的期望有什么问题?

我认为您混淆了 "What is stored in Git" 和 "What BitBucket shows you"。有两个独立的父项,您可以通过单击 BitBucket 界面右侧的链接与每个父项进行比较。

why this wouldn't show as the "content of the merge commit".

您可以通过依次 select 合并提交和两个 parents 中的每一个来可视化合并提交的内容。

当您 select(在 SourceTree 中)开发分支中的一个(除了合并提交)时,您清楚地看到 files_to_lose/source 已被删除:

Why does the commit itself not show the missing file?

因为在合并提交的情况下,有两个 parents 可以比较。 SourceTree 不提供针对这两个 parents.

的差异

GitMac 或 Windows 的 Hub,当您 select 合并提交时:

简而言之,这不是关于 Git,而是关于您正在使用的 Git GUI。

我不确定您的问题是关于 bitbucket 还是关于 git。但是,在 git 中,您需要 运行 git show-m 标志才能显示合并提交。添加该标志会显示已删除的文件:

$ git show --summary -m 5080a24
commit 5080a24f6585af2b38161ba55ec4835c7171634d (from 7dfa23e1bfc0a460bfe8071e3623ce9b5959a785)
Merge: a8a08dc 7dfa23e
Author: Matej VitaÌsek <vektor330@gmail.com>
Date:   Wed Jul 8 09:58:05 2015 +0200

    Hahaaa, a hidden files commit!

 delete mode 100644 files_to_lose/source
$