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

[PATCH] user-manual: how to replace commits older than most recent

From
JFJ. Bruce Fields <bfields@citi.umich.edu>
Date
Mar 4, 2007, 21:59 UTC
Message-ID
<11730455602463-git-send-email-bfields@citi.umich.edu>
In-Reply-To
<11730455592152-git-send-email-bfields@citi.umich.edu>
From: J. Bruce Fields <bfields@citi.umich.edu>

"Modifying" an old commit by checking it out, --amend'ing it, then rebasing on top of it, is a slightly cumbersome technique, but I've found it useful frequently enough to make it seem worth documenting.

Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
---
 Documentation/user-manual.txt |   46 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 46 insertions(+), 0 deletions(-)
diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt
index 33f8a72..907f122 100644
--- a/Documentation/user-manual.txt
+++ b/Documentation/user-manual.txt
@@ -1333,6 +1333,7 @@ with the changes to be reverted, then you will be asked to fix
 conflicts manually, just as in the case of <<resolving-a-merge,
 resolving a merge>>.
 
+[[fixing-a-mistake-by-editing-history]]
 Fixing a mistake by editing history
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -1935,6 +1936,51 @@ return mywork to the state it had before you started the rebase:
 $ git rebase --abort
 -------------------------------------------------
 
+Modifying a single commit
+-------------------------
+
+We saw in <<fixing-a-mistake-by-editing-history>> that you can replace the
+most recent commit using
+
+-------------------------------------------------
+$ git commit --amend
+-------------------------------------------------
+
+which will replace the old commit by a new commit incorporating your
+changes, giving you a chance to edit the old commit message first.
+
+You can also use a combination of this and gitlink:git-rebase[1] to edit
+commits further back in your history.  First, tag the problematic commit with
+
+-------------------------------------------------
+$ git tag bad mywork~5
+-------------------------------------------------
+
+(Either gitk or git-log may be useful for finding the commit.)
+
+Then check out a new branch at that commit, edit it, and rebase the rest of
+the series on top of it:
+
+-------------------------------------------------
+$ git checkout -b TMP bad
+$ # make changes here and update the index
+$ git commit --amend
+$ git rebase --onto TMP bad mywork
+-------------------------------------------------
+
+When you're done, you'll be left with mywork checked out, with the top patches
+on mywork reapplied on top of the modified commit you created in TMP.  You can
+then clean up with
+
+-------------------------------------------------
+$ git branch -d TMP
+$ git tag -d bad
+-------------------------------------------------
+
+Note that the immutable nature of git history means that you haven't really
+"modified" existing commits; instead, you have replaced the old commits with
+new commits having new object names.
+
 Reordering or selecting from a patch series
 -------------------------------------------
 
-- 
1.5.0.gb75812-dirty
Previous: J. Bruce FieldsNext: J. Bruce Fields
Message 6 of 27 in “Documentation (mostly user manual) patches”
  1. J. Bruce FieldsMar 4, 2007
  2. Documentation: mention module option to git-cvsimportJ. Bruce Fields, Mar 4, 2007
  3. user-manual: reset to ORIG_HEAD not HEAD to undo mergeJ. Bruce Fields, Mar 4, 2007
  4. user-manual: ensure generated manual references stylesheetJ. Bruce Fields, Mar 4, 2007
  5. user-manual: insert earlier of mention content-addressable architectureJ. Bruce Fields, Mar 4, 2007
  6. user-manual: how to replace commits older than most recentJ. Bruce Fields, Mar 4, 2007
  7. user-manual: more detailed merge discussionJ. Bruce Fields, Mar 4, 2007
  8. glossary: Add definitions for dangling and unreachable objectsJ. Bruce Fields, Mar 4, 2007
  9. Yasushi SHOJIMar 5, 2007
  10. Robert PluimMar 16, 2007
  11. J. Bruce FieldsMar 16, 2007
  12. Junio C HamanoMar 5, 2007
  13. J. Bruce FieldsMar 5, 2007
  14. J. Bruce FieldsMar 11, 2007
  15. 1/6 glossary: fix overoptimistic automatic linking of defined termsJ. Bruce Fields, Mar 11, 2007
  16. 2/6 user-manual: fix inconsistent exampleJ. Bruce Fields, Mar 11, 2007
  17. 3/6 user-manual: fix inconsistent use of pull and mergeJ. Bruce Fields, Mar 11, 2007
  18. 4/6 user-manual: fix missing colon in git-show exampleJ. Bruce Fields, Mar 11, 2007
  19. 5/6 user-manual: fix rendering of history diagramsJ. Bruce Fields, Mar 11, 2007
  20. 6/6 user-manual: install user manual stylesheet with other web documentsJ. Bruce Fields, Mar 11, 2007
  21. J. Bruce FieldsMar 11, 2007
  22. Ramsay JonesMar 13, 2007
  23. J. Bruce FieldsMar 14, 2007
  24. Junio C HamanoMar 11, 2007
  25. Ramsay JonesMar 7, 2007
  26. J. Bruce FieldsMar 16, 2007
  27. J. Bruce FieldsMar 16, 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.