git-commit-vandalism/builtin
Christopher Tiwald f25950f347 push: Provide situational hints for non-fast-forward errors
Pushing a non-fast-forward update to a remote repository will result in
an error, but the hint text doesn't provide the correct resolution in
every case. Give better resolution advice in three push scenarios:

1) If you push your current branch and it triggers a non-fast-forward
error, you should merge remote changes with 'git pull' before pushing
again.

2) If you push to a shared repository others push to, and your local
tracking branches are not kept up to date, the 'matching refs' default
will generate non-fast-forward errors on outdated branches. If this is
your workflow, the 'matching refs' default is not for you. Consider
setting the 'push.default' configuration variable to 'current' or
'upstream' to ensure only your current branch is pushed.

3) If you explicitly specify a ref that is not your current branch or
push matching branches with ':', you will generate a non-fast-forward
error if any pushed branch tip is out of date. You should checkout the
offending branch and merge remote changes before pushing again.

Teach transport.c to recognize these scenarios and configure push.c
to hint for them. If 'git push's default behavior changes or we
discover more scenarios, extension is easy. Standardize on the
advice API and add three new advice variables, 'pushNonFFCurrent',
'pushNonFFDefault', and 'pushNonFFMatching'. Setting any of these
to 'false' will disable their affiliated advice. Setting
'pushNonFastForward' to false will disable all three, thus preserving the
config option for users who already set it, but guaranteeing new
users won't disable push advice accidentally.

Based-on-patch-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Christopher Tiwald <christiwald@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-03-19 21:42:06 -07:00
..
add.c Merge branch 'js/add-e-submodule-fix' into maint 2012-02-13 11:42:18 -08:00
annotate.c
apply.c Use correct grammar in diffstat summary line 2012-02-03 23:19:42 -08:00
archive.c
bisect--helper.c
blame.c Merge branch 'zj/decimal-width' 2012-02-20 00:15:11 -08:00
branch.c Merge branch 'cn/maint-branch-with-bad' into maint 2012-03-04 22:17:52 -08:00
bundle.c
cat-file.c drop odd return value semantics from userdiff_config 2012-02-07 10:44:54 -08:00
check-attr.c
check-ref-format.c
checkout-index.c
checkout.c Merge branch 'jc/checkout-out-of-unborn' into maint 2012-02-16 14:18:06 -08:00
clean.c
clone.c Merge branch 'cb/transfer-no-progress' into maint 2012-02-21 15:14:37 -08:00
commit-tree.c Merge branch 'jc/show-sig' 2012-01-06 12:44:07 -08:00
commit.c Merge branch 'jx/i18n-more-marking' into maint 2012-02-16 13:59:53 -08:00
config.c config: add include directive 2012-02-17 07:59:55 -08:00
count-objects.c
describe.c
diff-files.c
diff-index.c
diff-tree.c
diff.c diff --stat: add config option to limit graph width 2012-03-01 09:15:58 -08:00
fast-export.c Merge branch 'rs/no-no-no-parseopt' 2012-03-01 20:59:31 -08:00
fetch-pack.c Merge branch 'cb/transfer-no-progress' 2012-02-20 00:14:55 -08:00
fetch.c Merge branch 'cb/transfer-no-progress' 2012-02-20 00:14:55 -08:00
fmt-merge-msg.c Convert resolve_ref+xstrdup to new resolve_refdup function 2011-12-13 09:26:52 -08:00
for-each-ref.c Convert resolve_ref+xstrdup to new resolve_refdup function 2011-12-13 09:26:52 -08:00
fsck.c fsck: --no-dangling omits "dangling object" information 2012-02-28 14:55:39 -08:00
gc.c
grep.c Merge branch 'rs/no-no-no-parseopt' 2012-03-01 20:59:31 -08:00
hash-object.c
help.c
index-pack.c index-pack: eliminate unlimited recursion in get_base_data() 2012-01-16 14:34:33 -08:00
init-db.c builtin/init-db.c: eliminate -Wformat warning on Solaris 2011-12-20 16:02:08 -08:00
log.c diff --stat: add config option to limit graph width 2012-03-01 09:15:58 -08:00
ls-files.c
ls-remote.c
ls-tree.c
mailinfo.c mailinfo: with -b, keep space after [foo] 2012-01-16 16:06:57 -08:00
mailsplit.c
merge-base.c
merge-file.c
merge-index.c
merge-ours.c
merge-recursive.c
merge-tree.c sparse: Fix an "symbol 'merge_file' not decared" warning 2011-04-11 10:35:25 -07:00
merge.c Merge branch 'zj/diff-stat-dyncol' 2012-03-06 14:53:06 -08:00
mktag.c
mktree.c
mv.c Merge branch 'jk/maint-mv' into maint 2011-12-28 11:32:36 -08:00
name-rev.c Merge branch 'jc/maint-name-rev-all' into maint-1.7.6 2011-12-13 21:12:34 -08:00
notes.c Merge branch 'nd/war-on-nul-in-commit' 2011-12-22 11:27:26 -08:00
pack-objects.c pack-objects: Fix compilation with NO_PTHREDS 2012-02-26 17:46:00 -08:00
pack-redundant.c
pack-refs.c
patch-id.c
prune-packed.c fix deletion of .git/objects sub-directories in git-prune/repack 2012-03-07 10:24:33 -08:00
prune.c fix deletion of .git/objects sub-directories in git-prune/repack 2012-03-07 10:24:33 -08:00
push.c push: Provide situational hints for non-fast-forward errors 2012-03-19 21:42:06 -07:00
read-tree.c
receive-pack.c Merge branch 'cb/receive-pack-keep-errors' into maint 2012-02-21 15:14:41 -08:00
reflog.c
remote-ext.c
remote-fd.c
remote.c Merge branch 'pj/remote-set-branches-usage-fix' into maint 2012-02-27 15:33:33 -08:00
replace.c
rerere.c
reset.c
rev-list.c rev-list: fix --verify-objects --quiet becoming --objects 2012-02-28 10:47:30 -08:00
rev-parse.c
revert.c Merge branch 'jc/advise-i18n' 2012-01-31 22:01:14 -08:00
rm.c
send-pack.c push/fetch/clone --no-progress suppresses progress output 2012-02-13 13:06:53 -08:00
shortlog.c
show-branch.c Rename resolve_ref() to resolve_ref_unsafe() 2011-12-13 09:39:46 -08:00
show-ref.c
stripspace.c Update documentation for stripspace 2011-12-12 16:48:54 -08:00
symbolic-ref.c symbolic-ref --short: abbreviate the output unambiguously 2012-02-27 15:58:36 -08:00
tag.c Merge branch 'tg/tag-points-at' 2012-02-20 00:15:28 -08:00
tar-tree.c
unpack-file.c
unpack-objects.c
update-index.c
update-ref.c
update-server-info.c
upload-archive.c
var.c
verify-pack.c
verify-tag.c verify-tag: Parse GPG configuration options. 2012-03-08 14:03:07 -08:00
write-tree.c