git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 2/2] filter-branch: update current branch when rewritten

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Oct 17, 2007, 02:23 UTC
Message-ID
<Pine.LNX.4.64.0710170322400.25221@racer.site>
In-Reply-To
<Pine.LNX.4.64.0710170322000.25221@racer.site>

Earlier, "git filter-branch --<options> HEAD" would not update the working tree after rewriting the branch. This commit fixes it.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
	Bill, I hope this clarifies some things for you, too...
 git-filter-branch.sh     |   15 +++++++++++++++
 t/t7003-filter-branch.sh |    4 +++-
 2 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index a12f6c2..ffcc408 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -94,6 +94,10 @@ USAGE="[--env-filter <command>] [--tree-filter <command>] \
 
 . git-sh-setup
 
+git diff-files --quiet &&
+	git diff-index --cached --quiet HEAD ||
+	die "Cannot rewrite branch(es) with a dirty working directory."
+
 tempdir=.git-rewrite
 filter_env=
 filter_tree=
@@ -196,6 +200,9 @@ do
 	esac
 done < "$tempdir"/backup-refs
 
+ORIG_GIT_DIR="$GIT_DIR"
+ORIG_GIT_WORK_TREE="$GIT_WORK_TREE"
+ORIG_GIT_INDEX_FILE="$GIT_INDEX_FILE"
 export GIT_DIR GIT_WORK_TREE=.
 
 # These refs should be updated if their heads were rewritten
@@ -413,4 +420,12 @@ echo
 test $count -gt 0 && echo "These refs were rewritten:"
 git show-ref | grep ^"$orig_namespace"
 
+unset GIT_DIR GIT_WORK_TREE GIT_INDEX_FILE
+test -z "$ORIG_GIT_DIR" || GIT_DIR="$ORIG_GIT_DIR" && export GIT_DIR
+test -z "$ORIG_GIT_WORK_TREE" || GIT_WORK_TREE="$ORIG_GIT_WORK_TREE" &&
+	export GIT_WORK_TREE
+test -z "$ORIG_GIT_INDEX_FILE" || GIT_INDEX_FILE="$ORIG_GIT_INDEX_FILE" &&
+	export GIT_INDEX_FILE
+git read-tree -u -m HEAD
+
 exit $ret
diff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh
index e935b20..2089351 100755
--- a/t/t7003-filter-branch.sh
+++ b/t/t7003-filter-branch.sh
@@ -41,7 +41,9 @@ test_expect_success 'rewrite, renaming a specific file' '
 '
 
 test_expect_success 'test that the file was renamed' '
-	test d = $(git show HEAD:doh)
+	test d = $(git show HEAD:doh) &&
+	test -f doh &&
+	test d = $(cat doh)
 '
 
 git tag oldD HEAD~4
-- 
1.5.3.4.1223.ga973c
Previous: Johannes SchindelinNext: Bill Lear
Message 3 of 5 in “Question on git-filter-branch”
  1. Bill LearOct 17, 2007
  2. 1/2 fix filter-branch documentationJohannes Schindelin, Oct 17, 2007
  3. 2/2 filter-branch: update current branch when rewrittenJohannes Schindelin, Oct 17, 2007
  4. Bill LearOct 18, 2007
  5. Shawn O. PearceOct 19, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.