gpt4 book ai didi

git - 如何找到 Git 存储库中所有有冲突的 merge ?

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

我正在进行一项研究,以研究开源项目中的 merge 。

我最近问了How can I find all the commits that have more than one parent in a Git repository? ,并得到了很好的答案。

现在我需要缩小查询范围以仅查找有冲突的提交。

关于冲突,我的意思是同一个文件在两次贡献提交中被修改。

此外,如果我能找到一个 git 或 bash(grep、awk?)命令,它只提供那些同一行被两个贡献者修改的提交,那将非常有用。

想法是找到无法自动解决的提交。

那么,我怎样才能在 git 存储库中找到所有有冲突的 merge ?

最佳答案

一旦创建了 merge 提交,不幸的是 merge 是如何执行的信息丢失了。这很重要,因为 git merge 接受许多影响冲突外观的选项,例如策略和每个策略选项。但是,如果您的目标是涵盖找到与默认 merge 选项产生冲突的 merge 的合理情况,则可以对其进行暴力破解:遍历 merge 提交,重新创建它们的 merge ,并标记 git 报告的地方。

注意:此脚本检查许多不同的提交,并在每次迭代中运行 git reset --hard 甚至 git clean -fdx。确保只在不包含 git 未知的重要文件的 checkout 中运行它!

#!/bin/bash

old_branch=$(git symbolic-ref --short HEAD)
for commit in `git rev-list --merges HEAD`
do
# find the parents of the merge commit
parents=$(git log -1 --format=%P $commit)
fst=${parents%% *}
rest=${parents#* }
# check out the first parent
git checkout -q $fst
# merge with the rest of them
git merge --no-commit $rest >/dev/null 2>&1
# if there are any conflicts, print the commit and abort the merge
if git ls-files --unmerged | grep -q '^'; then
echo $commit
git merge --abort
fi
# get rid of changes so the next checkout doesnt complain
git reset -q --hard
git clean -fdxq
done
git checkout -q $old_branch

关于git - 如何找到 Git 存储库中所有有冲突的 merge ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15707769/

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