feat: add resolve cmd

This commit is contained in:
Rudxain 2026-03-04 00:48:05 -04:00 committed by Ricardo Fernández Serrata
parent 9d6319becb
commit a848f827cf
2 changed files with 42 additions and 0 deletions

View file

@ -58,6 +58,7 @@
- [`git rename-remote`](#git-rename-remote) - [`git rename-remote`](#git-rename-remote)
- [`git repl`](#git-repl) - [`git repl`](#git-repl)
- [`git reset-file`](#git-reset-file) - [`git reset-file`](#git-reset-file)
- [`git resolve`](#git-resolve)
- [`git root`](#git-root) - [`git root`](#git-root)
- [`git rscp`](#git-scp) - [`git rscp`](#git-scp)
- [`git scp`](#git-scp) - [`git scp`](#git-scp)
@ -1402,6 +1403,16 @@ or reset one file to certain commit
$ git reset-file .htaccess dc82b19 $ git reset-file .htaccess dc82b19
``` ```
## git resolve
On default text-editor, open unmerged ("both modified" `status`) files in working-directory that have errors (e.g. conflict-markers),
then auto-stage all (in full work-tree) unmerged files without errors,
and finally [`continue`](#git-continue) (if possible).
```bash
$ git resolve
```
## git mr ## git mr
Checks out a merge request from GitLab. Usage: `git mr <ID|URL> [REMOTE]`. Checks out a merge request from GitLab. Usage: `git mr <ID|URL> [REMOTE]`.

31
bin/git-resolve Executable file
View file

@ -0,0 +1,31 @@
#!/usr/bin/env bash
set -eufo pipefail
IFS=$' \t'
#shellcheck disable=SC2046
# ignore files outside WD, to avoid overload
git diff --name-only --diff-filter=U --relative -z |
while IFS= read -r -d '' f; do
# `--quiet` implies `--exit-code` which is incompatible with `--check`;
# however, it could be special-cased internally, so it could work
# (untested)
if ! git diff --check -- "$f" &>/dev/null; then
printf '%s\0' "$f"
fi
done |
# WARN: `-r` is too new
# https://github.com/tj/git-extras/pull/1233#issuecomment-3957233996
xargs -0r $(git var GIT_EDITOR)
# user might have removed other conflict-markers,
# so check full WT
git diff --name-only --diff-filter=U -z |
while IFS= read -r -d '' f; do
# WARN: `f` is relative to repo root!
# this might be broken
if git diff --check -- "$f"; then
git add -- "$f"
fi
done
git continue