mirror of
https://github.com/git/git.git
synced 2024-11-25 19:04:18 +08:00
f25950f347
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>
23 lines
673 B
C
23 lines
673 B
C
#ifndef ADVICE_H
|
|
#define ADVICE_H
|
|
|
|
#include "git-compat-util.h"
|
|
|
|
extern int advice_push_nonfastforward;
|
|
extern int advice_push_non_ff_current;
|
|
extern int advice_push_non_ff_default;
|
|
extern int advice_push_non_ff_matching;
|
|
extern int advice_status_hints;
|
|
extern int advice_commit_before_merge;
|
|
extern int advice_resolve_conflict;
|
|
extern int advice_implicit_identity;
|
|
extern int advice_detached_head;
|
|
|
|
int git_default_advice_config(const char *var, const char *value);
|
|
void advise(const char *advice, ...);
|
|
int error_resolve_conflict(const char *me);
|
|
extern void NORETURN die_resolve_conflict(const char *me);
|
|
void detach_advice(const char *new_name);
|
|
|
|
#endif /* ADVICE_H */
|