Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions Commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
- [`git rename-remote`](#git-rename-remote)
- [`git repl`](#git-repl)
- [`git reset-file`](#git-reset-file)
- [`git resolve`](#git-resolve)
- [`git root`](#git-root)
- [`git rscp`](#git-scp)
- [`git scp`](#git-scp)
Expand Down Expand Up @@ -1402,6 +1403,16 @@ or reset one file to certain commit
$ 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

Checks out a merge request from GitLab. Usage: `git mr <ID|URL> [REMOTE]`.
Expand Down
31 changes: 31 additions & 0 deletions bin/git-resolve
Original file line number Diff line number Diff line change
@@ -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