/usr/libexec/git-core
#!/usr/bin/sh # # Copyright (c) 2005 Junio C Hamano # # Resolve two or more trees. # . git-sh-setup LF=' ' # The first parameters up to -- are merge bases; the rest are heads. bases= head= remotes= sep_seen= for arg do case ",$sep_seen,$head,$arg," in *,--,) sep_seen=yes ;; ,yes,,*) head=$arg ;; ,yes,*) remotes="$remotes$arg " ;; *) bases="$bases$arg " ;; esac done # Reject if this is not an octopus -- resolve should be used instead. case "$remotes" in ?*' '?*) ;; *) exit 2 ;; esac # MRC is the current "merge reference commit" # MRT is the current "merge result tree" if ! git diff-index --quiet --cached HEAD -- then gettextln "Error: Your local changes to the following files would be overwritten by merge" git diff-index --cached --name-only HEAD -- | sed -e 's/^/ /' exit 2 fi MRC=$(git rev-parse --verify -q $head) MRT=$(git write-tree) NON_FF_MERGE=0 OCTOPUS_FAILURE=0 for SHA1 in $remotes do case "$OCTOPUS_FAILURE" in 1) # We allow only last one to have a hand-resolvable # conflicts. Last round failed and we still had # a head to merge. gettextln "Automated merge did not work." gettextln "Should not be doing an octopus." exit 2 esac eval pretty_name=\${GITHEAD_$SHA1:-$SHA1} if test "$SHA1" = "$pretty_name" then SHA1_UP="$(echo "$SHA1" | tr a-z A-Z)" eval pretty_name=\${GITHEAD_$SHA1_UP:-$pretty_name} fi common=$(git merge-base --all $SHA1 $MRC) || die "$(eval_gettext "Unable to find common commit with \$pretty_name")" case "$LF$common$LF" in *"$LF$SHA1$LF"*) eval_gettextln "Already up to date with \$pretty_name" continue ;; esac if test "$common,$NON_FF_MERGE" = "$MRC,0" then # The first head being merged was a fast-forward. # Advance MRC to the head being merged, and use that # tree as the intermediate result of the merge. # We still need to count this as part of the parent set. eval_gettextln "Fast-forwarding to: \$pretty_name" git read-tree -u -m $head $SHA1 || exit MRC=$SHA1 MRT=$(git write-tree) continue fi NON_FF_MERGE=1 eval_gettextln "Trying simple merge with \$pretty_name" git read-tree -u -m --aggressive $common $MRT $SHA1 || exit 2 next=$(git write-tree 2>/dev/null) if test $? -ne 0 then gettextln "Simple merge did not work, trying automatic merge." git merge-index -o git-merge-one-file -a || OCTOPUS_FAILURE=1 next=$(git write-tree 2>/dev/null) fi MRC="$MRC $SHA1" MRT=$next done exit "$OCTOPUS_FAILURE"
.
Edit
..
Edit
git
Edit
git-add
Edit
git-am
Edit
git-annotate
Edit
git-apply
Edit
git-archive
Edit
git-bisect
Edit
git-blame
Edit
git-branch
Edit
git-bugreport
Edit
git-bundle
Edit
git-cat-file
Edit
git-check-attr
Edit
git-check-ignore
Edit
git-check-mailmap
Edit
git-check-ref-format
Edit
git-checkout
Edit
git-checkout--worker
Edit
git-checkout-index
Edit
git-cherry
Edit
git-cherry-pick
Edit
git-clean
Edit
git-clone
Edit
git-column
Edit
git-commit
Edit
git-commit-graph
Edit
git-commit-tree
Edit
git-config
Edit
git-contacts
Edit
git-count-objects
Edit
git-credential
Edit
git-credential-cache
Edit
git-credential-cache--daemon
Edit
git-credential-netrc
Edit
git-credential-store
Edit
git-describe
Edit
git-diagnose
Edit
git-diff
Edit
git-diff-files
Edit
git-diff-index
Edit
git-diff-tree
Edit
git-difftool
Edit
git-difftool--helper
Edit
git-fast-export
Edit
git-fast-import
Edit
git-fetch
Edit
git-fetch-pack
Edit
git-filter-branch
Edit
git-fmt-merge-msg
Edit
git-for-each-ref
Edit
git-for-each-repo
Edit
git-format-patch
Edit
git-fsck
Edit
git-fsck-objects
Edit
git-fsmonitor--daemon
Edit
git-gc
Edit
git-get-tar-commit-id
Edit
git-grep
Edit
git-hash-object
Edit
git-help
Edit
git-hook
Edit
git-http-backend
Edit
git-http-fetch
Edit
git-http-push
Edit
git-imap-send
Edit
git-index-pack
Edit
git-init
Edit
git-init-db
Edit
git-interpret-trailers
Edit
git-log
Edit
git-ls-files
Edit
git-ls-remote
Edit
git-ls-tree
Edit
git-mailinfo
Edit
git-mailsplit
Edit
git-maintenance
Edit
git-merge
Edit
git-merge-base
Edit
git-merge-file
Edit
git-merge-index
Edit
git-merge-octopus
Edit
git-merge-one-file
Edit
git-merge-ours
Edit
git-merge-recursive
Edit
git-merge-resolve
Edit
git-merge-subtree
Edit
git-merge-tree
Edit
git-mergetool
Edit
git-mergetool--lib
Edit
git-mktag
Edit
git-mktree
Edit
git-multi-pack-index
Edit
git-mv
Edit
git-name-rev
Edit
git-notes
Edit
git-pack-objects
Edit
git-pack-redundant
Edit
git-pack-refs
Edit
git-patch-id
Edit
git-prune
Edit
git-prune-packed
Edit
git-pull
Edit
git-push
Edit
git-quiltimport
Edit
git-range-diff
Edit
git-read-tree
Edit
git-rebase
Edit
git-receive-pack
Edit
git-reflog
Edit
git-refs
Edit
git-remote
Edit
git-remote-ext
Edit
git-remote-fd
Edit
git-remote-ftp
Edit
git-remote-ftps
Edit
git-remote-http
Edit
git-remote-https
Edit
git-repack
Edit
git-replace
Edit
git-replay
Edit
git-request-pull
Edit
git-rerere
Edit
git-reset
Edit
git-restore
Edit
git-rev-list
Edit
git-rev-parse
Edit
git-revert
Edit
git-rm
Edit
git-send-pack
Edit
git-sh-i18n
Edit
git-sh-i18n--envsubst
Edit
git-sh-setup
Edit
git-shell
Edit
git-shortlog
Edit
git-show
Edit
git-show-branch
Edit
git-show-index
Edit
git-show-ref
Edit
git-sparse-checkout
Edit
git-stage
Edit
git-stash
Edit
git-status
Edit
git-stripspace
Edit
git-submodule
Edit
git-submodule--helper
Edit
git-switch
Edit
git-symbolic-ref
Edit
git-tag
Edit
git-unpack-file
Edit
git-unpack-objects
Edit
git-update-index
Edit
git-update-ref
Edit
git-update-server-info
Edit
git-upload-archive
Edit
git-upload-pack
Edit
git-var
Edit
git-verify-commit
Edit
git-verify-pack
Edit
git-verify-tag
Edit
git-version
Edit
git-web--browse
Edit
git-whatchanged
Edit
git-worktree
Edit
git-write-tree
Edit
mergetools
Edit
scalar
Edit