#!/usr/bin/env bash set -euo pipefail # @describe Keep your changes or incoming changes during merge/rebase conflicts # @meta version 1.0.0 # @meta require-tools git is_rebase() { [ -d "$(git rev-parse --git-path rebase-merge 2>/dev/null)" ] || [ -d "$(git rev-parse --git-path rebase-apply 2>/dev/null)" ] } do_keep() { local ours="$1" theirs="$2" shift 2 if is_rebase; then git checkout --"$theirs" "$@" else git checkout --"$ours" "$@" fi git add "$@" } # @cmd Keep your current branch changes for specified files mine() { do_keep "ours" "theirs" "${@:-.}" } # @cmd Keep incoming branch changes for specified files incoming() { do_keep "theirs" "ours" "${@:-.}" } eval "$(argc --argc-eval "$0" "$@")"