【问题标题】:how to list all to be merged files or all merge commits如何列出所有要合并的文件或所有合并提交
【发布时间】:2021-07-08 12:14:39
【问题描述】:

我正在尝试列出在创建合并请求时要合并的所有新文件。使用以下代码,我可以获取所有文件,但只能从最后一次提交中获取:

script {
    def commitedFiles = sh(returnStdout: true, script: "git diff-tree --no-commit-id --name-only -r ${gitlabMergeRequestLastCommit}")       
    if (commitedFiles.contains(".sql")) {
        println "[INFO] Adding merge request comment..."
        addGitLabMRComment comment: "Merge commit contains SQL files."
    }
    else {
        println "[INFO] No SQL files found in the merge commit. Omitting..."
    }
}

但是,如果有多个合并提交,我无法检查是否有不应该合并的文件。

有没有办法列出所有尚未合并的文件或至少获取所有合并提交(在 Gitlab 的合并请求中的“提交”选项卡中可见),以便遍历它们并获取所有文件?

【问题讨论】:

    标签: git merge gitlab


    【解决方案1】:

    要获取“自当前从目标分支分叉”以来修改的文件列表,请使用:

    git diff --name-only [upstream branch]...[current branch]   # 3 dots
    
    # for example :
    git diff --name-only origin/main...origin/feature
    

    供参考:此行为记录在git help diff的初始段落中

    git diff A...B 等价于git diff $(git merge-base A B) B。可以省略<commit> 中的任何一个,其效果与使用HEAD 相同。

    git merge-base A BAB 之间的最新分叉点。

    【讨论】:

    • 谢谢!这工作得很好。一个后续问题:是否可以只获取新添加的文件,不包括修改的文件?
    • git diff 选项中查看--diff-filter。如果您想避免文件被检测为Rnamed 而不是Added,您可能还需要添加--no-renames
    • '--diff-filter=[A]' 可以解决问题。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2012-04-28
    相关资源
    最近更新 更多