如何在本地仅解决Git冲突,避免引入非冲突文件变更?
仅解决分支冲突且不引入非冲突变更的本地操作方法
要实现你想要的效果——只处理冲突文件、不把main分支的非冲突变更带到feature分支,按以下步骤操作即可:
拉取main分支最新代码
先同步远程main分支的最新提交到本地:git fetch origin main执行不自动提交的合并
用以下命令启动合并,但让Git不要自动提交结果,也不做快进合并:git merge origin/main --no-commit --no-ff这一步会让Git尝试合并两个分支,标记出所有冲突文件,同时把main分支的所有变更都放到暂存区和工作区。
解决冲突并标记完成
手动修改所有冲突文件里的代码冲突,搞定后把这些文件标记为已解决:git add <冲突文件名>撤销非冲突文件的变更
先导出所有冲突文件的列表:conflict_files=$(git diff --name-only --diff-filter=U)接着把所有非冲突的变更文件恢复到合并前的状态,彻底移除main分支带来的无关修改:
git ls-files -m | grep -vFf <(echo "$conflict_files") | xargs git restore --staged --worktree提交仅含冲突解决的合并
确认工作区里只有冲突文件的修改后,提交这次合并:git commit提交时可以写清楚提交信息,说明这是仅解决分支冲突的操作。
做完这些,你的feature分支就只会保留冲突文件的修改,提交PR时不会出现大量无关文件,评审起来更轻松。
内容的提问来源于stack exchange,提问作者Mohamed Magdy
相关产品推荐
相关产品推荐

