gpt4 book ai didi

git - 如何在git中仅列出自动 merge 的文件

转载 作者:太空狗 更新时间:2023-10-29 14:12:10 25 4
gpt4 key购买 nike

是否有任何命令可以在 pull 后仅在 git 中列出自动 merge 的文件。自动 merge 并不强制我们看代码。有时我需要明确检查自动 merge 的文件。

Git 通常以三种类型混合列出更改的文件。新文件出现或旧文件被删除,自动 merge 和冲突。如果 git 在内部识别自动 merge 的文件,所以我只是认为会有任何命令只列出自动 merge 的文件。顺便说一句,我想在 merge 提交之前获取此列表。

最佳答案

为了清楚地回答这个问题,让我们从一些定义和注释开始:

  • 要执行 merge ,git 必须找到“merge 基础”,它(非常松散地)是“当前分支和要 merge 的分支共享开发历史的提交”。
  • 您现在正在进行 merge ,并且使用了 --no-commit 或遇到了 merge 冲突。如果是后者,您还没有解决这些冲突。
  • 因此,您的工作树有准备提交的文件,但您实际上还没有提交。
  • merge 一旦提交,就会有两个父提交。一个是提交,您在进行 merge 提交之前所在分支的尖端。由于您尚未进行 merge 提交,因此您当前的 HEAD 提交现在是该分支的尖端。所以下面的短语“HEAD commit”的意思是“merge 之前分支的尖端”。
  • 与此同时,我们还需要一个简短的单词或短语来表示来自待 merge 分支(将成为第二个父分支)的提交。我将其称为“入站”提交。 (我没有在其他地方看到过这个词,我只是在查阅了一些同义词词典条目后编造的。)

根据您的评论回复,我相信您希望从 HEAD 提交中找到具有任何更改的文件,即那些已从中获取任何更改的文件入站提交,无论 git 是否在没有发现冲突的情况下 merge 了这些提交。

如果这是正确的,答案就很简单了:

git diff --cached --name-only

将列出它们。 (这有点令人惊讶,因为 git diff --cached 没有 --name-only 确实显示未 merge 的文件。)

如果你只想要 git 已经(或认为已经)成功 merge 的文件:

git status --porcelain | awk '/^M / { print $2 }'

将列出那些。 (省略 awk,并可选择使用 -s--short 而不是 --porcelain,以查看 git status 的输出。在这种情况下,我们查找状态为“已 merge ,准备提交”的文件。具有 merge 冲突的文件将处于 M 状态。)

您可能还想将文件与其基于 merge 的版本进行比较。这并不太难除了在多个 merge 基础的情况下(有点罕见)。不过,我会将这些细节从这个答案中删除。

关于git - 如何在git中仅列出自动 merge 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34773016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com