diff options
author | Miklos Vajna <vmiklos@frugalware.org> | 2008-10-03 14:04:47 +0200 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2008-10-03 08:18:45 -0700 |
commit | cf10f9fdd5e673a163847f0e931ce9731507e03b (patch) | |
tree | 16f66fce8188e900ae2c995ea62412e8671a3dd7 /branch.c | |
parent | 52e8370bc7a71366b664ece0a9ec0b79d673a356 (diff) | |
download | git-cf10f9fdd5e673a163847f0e931ce9731507e03b.tar.gz git-cf10f9fdd5e673a163847f0e931ce9731507e03b.tar.xz |
builtin-commit: use reduce_heads() only when appropriate
Since commit 6bb6b034 (builtin-commit: use commit_tree(), 2008-09-10),
builtin-commit performs a reduce_heads() unconditionally. However,
it's not always needed, and in some cases even harmful.
reduce_heads() is not needed for the initial commit or for an
"ordinary" commit, because they don't have any or have only one
parent, respectively.
reduce_heads() must be avoided when 'git commit' is run after a 'git
merge --no-ff --no-commit', otherwise it will turn the
non-fast-forward merge into fast-forward. For the same reason,
reduce_heads() must be avoided when amending such a merge commit.
To resolve this issue, 'git merge' will write info about whether
fast-forward is allowed or not to $GIT_DIR/MERGE_MODE. Based on this
info, 'git commit' will only perform reduce_heads() when it's
committing a merge and fast-forward is enabled.
Also add test cases to ensure that non-fast-forward merges are
committed and amended properly.
Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'branch.c')
-rw-r--r-- | branch.c | 1 |
1 files changed, 1 insertions, 0 deletions
@@ -168,5 +168,6 @@ void remove_branch_state(void) unlink(git_path("MERGE_HEAD")); unlink(git_path("MERGE_RR")); unlink(git_path("MERGE_MSG")); + unlink(git_path("MERGE_MODE")); unlink(git_path("SQUASH_MSG")); } |