You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git rebase冲突后如何单独查看冲突文件列表?

如何在Git Rebase冲突时查看冲突文件列表(含脚本自动化方案)

好问题!我之前在写自动化rebase脚本时也遇到过同样的困扰——手动遍历文件找冲突标记效率太低,而且想中途查看冲突文件又不想打断rebase流程。下面分两种场景给你解决方案:

一、手动查看冲突文件列表(不中断rebase)

Git内置了直接获取未合并(冲突)文件的命令,完全不需要自己遍历仓库:

  • 最简洁的方式:

    git diff --name-only --diff-filter=U
    

    解释:

    • --name-only:只输出文件名,不显示具体冲突内容
    • --diff-filter=U:筛选出处于「Unmerged(未合并)」状态的文件,也就是存在冲突的文件
  • 另一种更详细的方式:

    git ls-files --unmerged
    

    这个命令会输出冲突文件的stage状态(比如1、2、3对应的不同版本),如果需要区分文件的不同冲突版本可以用这个,但如果只需要文件名列表,第一个命令更直接。

二、脚本自动化处理偏向某分支的rebase

针对你提到的「自动完成偏向某一分支的rebase」需求,上面的git diff命令可以直接集成到脚本里,高效获取冲突文件后批量处理:

示例脚本(偏向目标分支内容)

#!/bin/bash

# 获取冲突文件列表
conflict_files=$(git diff --name-only --diff-filter=U)

if [ -n "$conflict_files" ]; then
  echo "发现冲突文件:"
  echo "$conflict_files"

  # 批量处理冲突:保留目标分支(rebase的基准分支)的内容
  for file in $conflict_files; do
    # 重要提醒:rebase时,--ours 指的是你要rebase到的基准分支(比如main)
    # --theirs 指的是当前所在的分支(比如feature),和普通merge的含义相反!
    git checkout --ours "$file"
    git add "$file"
    echo "已处理文件:$file(保留基准分支内容)"
  done

  # 继续rebase流程
  git rebase --continue
else
  echo "没有冲突,rebase已完成或无需处理。"
fi

关键注意点

一定要记牢rebase时--ours和--theirs的特殊含义:

  • 在普通git merge中,--ours是当前分支,--theirs是合并进来的分支;
  • 但在git rebase中,两者含义完全相反:--ours对应你要rebase到的基准分支,--theirs对应你当前所在的分支。搞反的话,脚本会保留错误的内容!

内容的提问来源于stack exchange,提问作者Mikhail Ramendik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:05:49