mirror of
https://github.com/git/git
synced 2024-08-28 20:20:07 +00:00
![Neil Horman](/assets/img/avatar_default.png)
The git-cherry-pick --allow-empty command by default only preserves empty commits that were originally empty, i.e only those commits for which <commit>^{tree} and <commit>^^{tree} are equal. By default commits which are non-empty, but were made empty by the inclusion of a prior commit on the current history are filtered out. This option allows us to override that behavior and include redundant commits as empty commits in the change history. Note that this patch changes the default behavior of git cherry-pick slightly. Prior to this patch all commits in a cherry-pick sequence were applied and git commit was run. The implication here was that, if a commit was redundant, and the commit did not trigger the fast forward logic, the git commit operation, and therefore the git cherry-pick operation would fail, displaying the cherry pick advice (i.e. run git commit --allow-empty). With this patch however, such redundant commits are automatically skipped without stopping, unless --keep-redundant-commits is specified, in which case, they are automatically applied as empty commits. Signed-off-by: Neil Horman <nhorman@tuxdriver.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
52 lines
903 B
C
52 lines
903 B
C
#ifndef SEQUENCER_H
|
|
#define SEQUENCER_H
|
|
|
|
#define SEQ_DIR "sequencer"
|
|
#define SEQ_HEAD_FILE "sequencer/head"
|
|
#define SEQ_TODO_FILE "sequencer/todo"
|
|
#define SEQ_OPTS_FILE "sequencer/opts"
|
|
|
|
enum replay_action {
|
|
REPLAY_REVERT,
|
|
REPLAY_PICK
|
|
};
|
|
|
|
enum replay_subcommand {
|
|
REPLAY_NONE,
|
|
REPLAY_REMOVE_STATE,
|
|
REPLAY_CONTINUE,
|
|
REPLAY_ROLLBACK
|
|
};
|
|
|
|
struct replay_opts {
|
|
enum replay_action action;
|
|
enum replay_subcommand subcommand;
|
|
|
|
/* Boolean options */
|
|
int edit;
|
|
int record_origin;
|
|
int no_commit;
|
|
int signoff;
|
|
int allow_ff;
|
|
int allow_rerere_auto;
|
|
int allow_empty;
|
|
int keep_redundant_commits;
|
|
|
|
int mainline;
|
|
|
|
/* Merge strategy */
|
|
const char *strategy;
|
|
const char **xopts;
|
|
size_t xopts_nr, xopts_alloc;
|
|
|
|
/* Only used by REPLAY_NONE */
|
|
struct rev_info *revs;
|
|
};
|
|
|
|
/* Removes SEQ_DIR. */
|
|
extern void remove_sequencer_state(void);
|
|
|
|
int sequencer_pick_revisions(struct replay_opts *opts);
|
|
|
|
#endif
|