删除git pull冲突文件

删除git pull冲突文件

如zig在某次更新时,出现如下错误:

remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), 653 bytes | 32.00 KiB/s, done.
From https://hub.fastgit.org/ziglang/zig
   81e2034d4..594271f8d  master     -> origin/master
Updating 81e2034d4..594271f8d
error: Your local changes to the following files would be overwritten by merge:
        CMakeLists.txt
        doc/langref.html.in
        src/AstGen.zig
        src/Sema.zig
        src/Zir.zig
        test/behavior.zig
        test/compile_errors.zig
Please commit your changes or stash them before you merge.
Aborting

编译gitmerge.vsh脚本,完成自动删除冲突文件、重新拉取文件:

#!/usr/bin/env -S v run

import io.util

println('gitmerge v0.0.3 by Zhuo Nengwen at 2021-09-04\n')

// 获取git pull错误内容
mut f, file_name := util.temp_file() ?
f.close()
system('git pull 2>$file_name')

// 检查是否有冲突文件
content := read_lines(file_name) ?
if content.len > 3 {
	mut start := 0
	for content[start] != 'error: Your local changes to the following files would be overwritten by merge:' {
		start++
	}
	mut end := content.len - 1
	for content[end] != 'Please commit your changes or stash them before you merge.' {
		end--
		if end < 0 {
			break
		}
	}
	// 如果冲突太多,最后只有一行Aborting信息
	if end < 0 {
		end = content.len - 1
		for content[end] != 'Aborting' {
			end--
		}
	}

	// 删除所有冲突文件
	for name in content[start + 1..end] {
		new_name := name.trim_space()
		cmd := 'rm $new_name'
		println(cmd)
		system(cmd)
	}

	// 重新拉取
	println('')
	system('git pull')
}

// 删除临时文件
system('rm $file_name')

posted @   卓能文  阅读(326)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示