[PATCH] git-commit --amend: respect grafted parents.
From: Johannes Sixt <hidden>
Date: 2016-06-15 22:43:36
Subsystem:
the rest · Maintainer:
Linus Torvalds
This allows a poor-mans-filter-branch of the top-most commit.
Specifically, I had this history:
--o--o--A' <-- amended version of A
\
A
\
--o--B--M
I now wanted to "amend" M to pull in A' instead of A as its second parent.
For various reasons I didn't want to redo the merge M again, in particular,
it already contained the changes that were amended into A'. So I figured
I would just install a graft that lists B and A' as parents of M and then
do a simple git commit --amend. Alas, git commit looks at the real parents
instead of the grafted ones, so the amended M' would still have A as its
second parent. Here is the fix that picks the grafted parents instead.
Signed-off-by: Johannes Sixt <redacted>
---
I know that git-commit is becoming a builtin. At the least, here is
a test that makes sure that the behavior is remains.
-- Hannes
git-commit.sh | 4 ++--
t/t7501-commit.sh | 9 +++++++++
2 files changed, 11 insertions(+), 2 deletions(-)
mode change 100644 => 100755 t/t7501-commit.sh
diff --git a/git-commit.sh b/git-commit.sh
index 7a7a2cb..33e7503 100755
--- a/git-commit.sh
+++ b/git-commit.sh@@ -529,8 +529,8 @@ then PARENTS="-p HEAD "`sed -e 's/^/-p /' "$GIT_DIR/MERGE_HEAD"` elif test -n "$amend"; then rloga='commit (amend)' - PARENTS=$(git cat-file commit HEAD | - sed -n -e '/^$/q' -e 's/^parent /-p /p') + PARENTS=$(git rev-list --parents -1 HEAD | + sed -e 's/^[^ ]*//' -e 's/ / -p /g') fi current="$(git rev-parse --verify HEAD)" else
diff --git a/t/t7501-commit.sh b/t/t7501-commit.sh
old mode 100644
new mode 100755
index b151b51..09c0d98
--- a/t/t7501-commit.sh
+++ b/t/t7501-commit.sh@@ -163,4 +163,13 @@ test_expect_success 'partial commit that involves removal (3)' ' ' +test_expect_success '--amend respects grafts' ' + + grandparent=$(git rev-parse HEAD~2) && + echo $(git rev-parse HEAD) $grandparent > .git/info/grafts && + git commit --amend -C HEAD && + test "parent $grandparent" = "$(git cat-file commit HEAD | grep "^parent")" + +' + test_done
--
1.5.3.3.gcc9e