From: R. Steve McKown Date: Thu, 8 Apr 2010 20:05:11 +0000 (-0600) Subject: Add a -f option to git-publish-branch X-Git-Url: https://oss.titaniummirror.com/gitweb?p=git-utils.git;a=commitdiff_plain;h=d1f483d7d69d2fa7589cb5d850a896dc46db33f8;hp=d0750a70c888c1172a9cf1c0606b490434774e5d Add a -f option to git-publish-branch --- diff --git a/git-publish-branch b/git-publish-branch index 4986c36..74584e6 100755 --- a/git-publish-branch +++ b/git-publish-branch @@ -2,9 +2,13 @@ # 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 @@ -47,6 +51,27 @@ if [ $delete ]; then 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 diff --git a/git-publish-branch.1 b/git-publish-branch.1 index 00a02f5..502399e 100644 --- a/git-publish-branch.1 +++ b/git-publish-branch.1 @@ -4,23 +4,35 @@ 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