115 lines
3.0 KiB
Plaintext
115 lines
3.0 KiB
Plaintext
git-history(1)
|
|
==============
|
|
|
|
NAME
|
|
----
|
|
git-history - EXPERIMENTAL: Rewrite history of the current branch
|
|
|
|
SYNOPSIS
|
|
--------
|
|
[synopsis]
|
|
git history [<options>]
|
|
git history reword [<options>] <commit>
|
|
git history split [<options>] <commit> [--] [<pathspec>...]
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
|
|
Rewrite history by rearranging or modifying specific commits in the
|
|
history.
|
|
|
|
This command is similar to linkgit:git-rebase[1] and uses the same
|
|
underlying machinery. You should use rebases if you either want to
|
|
reapply a range of commits onto a different base, or interactive rebases
|
|
if you want to edit a range of commits.
|
|
|
|
Note that this command does not (yet) work with histories that contain
|
|
merges. You should use linkgit:git-rebase[1] with the `--rebase-merges`
|
|
flag instead.
|
|
|
|
THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE.
|
|
|
|
COMMANDS
|
|
--------
|
|
|
|
This command requires a subcommand. Several subcommands are available to
|
|
rewrite history in different ways:
|
|
|
|
`reword <commit> [--message=<message>]`::
|
|
Rewrite the commit message of the specified commit. All the other
|
|
details of this commit remain unchanged. If no commit message is
|
|
provided, then this command will spawn an editor with the current
|
|
message of that commit.
|
|
|
|
`split [--message=<message>] <commit> [--] [<pathspec>...]`::
|
|
Interactively split up <commit> into two commits by choosing
|
|
hunks introduced by it that will be moved into the new split-out
|
|
commit. These hunks will then be written into a new commit that
|
|
becomes the parent of the previous commit. The original commit
|
|
stays intact, except that its parent will be the newly split-out
|
|
commit.
|
|
+
|
|
The commit message of the new commit will be asked for by launching the
|
|
configured editor, unless it has been specified with the `-m` option.
|
|
Authorship of the commit will be the same as for the original commit.
|
|
+
|
|
If passed, _<pathspec>_ can be used to limit which changes shall be split out
|
|
of the original commit. Files not matching any of the pathspecs will remain
|
|
part of the original commit. For more details, see the 'pathspec' entry in
|
|
linkgit:gitglossary[7].
|
|
+
|
|
It is invalid to select either all or no hunks, as that would lead to
|
|
one of the commits becoming empty.
|
|
|
|
CONFIGURATION
|
|
-------------
|
|
|
|
include::includes/cmd-config-section-all.adoc[]
|
|
|
|
include::config/sequencer.adoc[]
|
|
|
|
EXAMPLES
|
|
--------
|
|
|
|
Split a commit
|
|
~~~~~~~~~~~~~~
|
|
|
|
----------
|
|
$ git log --stat --oneline
|
|
3f81232 (HEAD -> main) original
|
|
bar | 1 +
|
|
foo | 1 +
|
|
2 files changed, 2 insertions(+)
|
|
|
|
$ git history split HEAD --message="split-out commit"
|
|
diff --git a/bar b/bar
|
|
new file mode 100644
|
|
index 0000000..5716ca5
|
|
--- /dev/null
|
|
+++ b/bar
|
|
@@ -0,0 +1 @@
|
|
+bar
|
|
(1/1) Stage addition [y,n,q,a,d,e,p,?]? y
|
|
|
|
diff --git a/foo b/foo
|
|
new file mode 100644
|
|
index 0000000..257cc56
|
|
--- /dev/null
|
|
+++ b/foo
|
|
@@ -0,0 +1 @@
|
|
+foo
|
|
(1/1) Stage addition [y,n,q,a,d,e,p,?]? n
|
|
|
|
$ git log --stat --oneline
|
|
7cebe64 (HEAD -> main) original
|
|
foo | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
d1582f3 split-out commit
|
|
bar | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
----------
|
|
|
|
GIT
|
|
---
|
|
Part of the linkgit:git[1] suite
|