# git-publish-branch [-d] [branch] [repository]
unset delete
+unset force
if [ "$1" = "-d" ]; then
delete=1
shift
+elif [ "$1" = "-f" ]; then
+ force=1
+ shift
fi
unset branch
git config --unset "branch.$branch.merge"
git config --unset "branch.$branch"
fi
+elif [ $force ]; then
+ if [ -z "$local_ref" ]; then
+ echo "no local branch $branch" >&2
+ exit 1
+ elif [ -z "$remote_ref" ]; then
+ echo "$remote has no branch $branch" >&2
+ exit 1
+ elif [ -z "$remote_config" ]; then
+ echo "local branch $branch is not a tracking branch" >&2
+ exit 1
+ fi
+
+ # Delete the remote branch
+ if [ -n "$remote_ref" ]; then
+ git push "$remote" ":refs/heads/$branch"
+ else
+ echo "$remote has to remote branch $branch" >&2
+ fi
+
+ # Push the new branch
+ git push "$remote" "+$branch:refs/heads/$branch"
else
if [ -z "$local_ref" ]; then
echo "no local branch $branch" >&2
git-publish-branch \- publish a local branch to a remote repository
.SH SYNOPSIS
-\fBgit-publish-branch\fR [-d] [\fIBRANCH\fR] [\fIREPOSITORY\fR]
+\fBgit-publish-branch\fR [-d] [-f] [\fIBRANCH\fR] [\fIREPOSITORY\fR]
.SH "DESCRIPTION"
.PP
\fBgit-publish-branch\fR publishes a local branch to a remote repository. The
selected branch is pushed to the remote repository and the local branch is
-reset as a tracking branch for the new remote branch.
+reset as a tracking branch for the new remote branch. Subsequent calls to
+\fBgit-publish-branch\fR peform fast-forward updates of the remote branch by
+pushing new commits in the local branch.
If the -d option is specified, the branch is removed from the remote repository
and the local branch is unset as its tracking branch.
+If the -f option is specified, allows a non-fast forward update of the remote
+branch, as supported by adding a '+' to the refspec on a git push command.
+BE CAREFUL, as this command will lose history on the remote branch. The -f
+option is only suitable for pushing topic or temporary branches that are
+periodically rebased, and other users of the branch are aware of the
+consequences.
+
.SH "OPTIONS"
.TP
-d
-Include this switch to delete (unpublish) a branch.
+Include this switch to delete (unpublish) a remote branch.
+
+-f
+Force a non-fast-forward update of the remote branch.
.TP
\fIBRANCH\fR