Git 如何修改现有的未推送提交消息?

Git 如何修改现有的未推送提交消息?,git,git-commit,git-rewrite-history,git-amend,Git,Git Commit,Git Rewrite History,Git Amend,我在提交消息中写错了东西 我怎样才能更改消息?尚未推送提交。修改最近的提交消息 git提交——修改 将打开编辑器,允许您更改最近提交的提交消息。此外,您可以使用以下命令直接在命令行中设置提交消息: git提交--amend-m“新提交消息” …但是,这可能会使多行提交消息或小的更正更难输入 在执行此操作之前,请确保没有任何正在进行的副本更改,否则它们也会提交。(未分级的更改将不会提交。) 更改已推送到远程分支的提交消息 如果您已经将提交推送到远程分支,那么在本地修改提交(如上所述)后,您还将

我在提交消息中写错了东西

我怎样才能更改消息?尚未推送提交。

修改最近的提交消息
git提交——修改
将打开编辑器,允许您更改最近提交的提交消息。此外,您可以使用以下命令直接在命令行中设置提交消息:

git提交--amend-m“新提交消息”
…但是,这可能会使多行提交消息或小的更正更难输入

在执行此操作之前,请确保没有任何正在进行的副本更改,否则它们也会提交。(未分级的更改将不会提交。)

更改已推送到远程分支的提交消息 如果您已经将提交推送到远程分支,那么在本地修改提交(如上所述)后,您还将:

git推送--force
#或
git-push-f
警告:强制推送将用本地分支的状态覆盖远程分支。如果远程分支上有您在本地分支中没有的提交,您将丢失这些提交

警告:修改您已与其他人共享的提交时要小心。修改提交实质上会将其重写为具有不同ID,如果其他人具有您已重写的旧提交的副本,则会产生问题。任何拥有旧提交副本的人都需要将他们的工作与您新重新编写的提交同步,这有时会很困难,因此,在尝试重写共享提交历史记录时,请确保与其他人协调,或者完全避免重写共享提交


执行交互式重基 另一个选项是使用交互式重基。 这允许您编辑任何要更新的邮件,即使它不是最新的邮件

要执行Git挤压,请执行以下步骤:

// n is the number of commits up to the last commit you want to be able to edit
git rebase -i HEAD~n
挤压提交后-选择
e/r
编辑消息:

关于交互式重基的重要注意事项 当您使用
git-rebase-i HEAD~n
时,可能会有多于n个提交。Git将“收集”最后n次提交中的所有提交,如果在该范围内的某个地方存在合并,您也将看到所有提交,因此结果将是n+

好提示: 如果您必须为多个分支执行此操作,并且在修改内容时可能会遇到冲突,请设置并让Git自动为您解决这些冲突


文档

如果要修复的提交不是最新的提交:

  • git-rebase--interactive$parent\u of\u-failured\u-commit

    如果要修复多个有缺陷的提交,请传递其中最旧提交的父级

  • 将出现一个编辑器,其中列出自您提交以来的所有提交

  • 在要修复的任何提交之前,将
    pick
    更改为
    reword
    (或在Git的旧版本上,更改为
    edit
  • 保存后,Git将重播列出的提交

  • 对于每个要重写的提交,Git都会将您放回编辑器中。对于要编辑的每个提交,Git都会将您放入shell中。如果你在壳中:

  • 以您喜欢的任何方式更改提交
  • git提交——修改
  • git-rebase——继续
  • 这一序列的大部分内容将在您执行时通过各种命令的输出向您解释。这很容易;你不需要记住它——只要记住,
    git-rebase--interactive
    可以让你纠正提交,不管它们是多久以前的


    请注意,您不希望更改已推送的提交。也许你会这样做,但在这种情况下,你将不得不非常小心地与每个人沟通,他们可能已经拉你的承诺,并在他们之上完成工作

    git提交--amend-m“您的新消息”
    
    如前所述,
    git commit--amend
    是覆盖上一次提交的方法。注意:如果您还想覆盖文件,则命令如下

    git提交-a--amend-m“我的新提交消息”
    
    要修改以前的提交,请进行所需的更改并暂存这些更改,然后运行

    git提交——修改
    
    这将在文本编辑器中打开一个表示新提交消息的文件。它以旧提交消息中的文本开始填充。根据需要更改提交消息,然后保存文件并退出编辑器以完成


    要修改以前的提交并保留相同的日志消息,请运行

    git提交--amend-C头
    
    要通过完全删除前一个提交来修复它,请运行

    git重置——硬头^
    
    如果要编辑多条提交消息,请运行


    git-rebase-i HEAD~commit\u count
    (将commit_count替换为要编辑的提交数。)此命令启动编辑器。将第一次提交(要更改的提交)标记为“编辑”而不是“拾取”,然后保存并退出编辑器。进行要提交的更改,然后运行

    git提交——修改
    git rebase--继续吗
    

    注意:您还可以从git commit--amend打开的编辑器中“进行所需的更改”。您还可以使用git filter branch进行此操作

    $ git rebase-reword <commit-or-refname>
    
    git过滤器分支-f--msg过滤器“sed's/error/error/”$profected_commit..HEAD
    
    它不像一个微不足道的
    git提交--amend
    那么简单,但是如果在错误的提交消息之后已经有了一些合并,那么它特别有用

    请注意,这将尝试重写
    
    
    git rebase -i HEAD~3
    
    git commit -a --amend -m "My new commit message"
    
    git checkout -b old_master refs/original/refs/heads/master
    
    Commit/Amend Last Commit
    
    git commit --amend -c <commit ID>
    
    git commit --amend
    
    git rebase -i [branched_from] [hash before commit]
    
    $ git rebase bbc643cd^ --interactive
    
    $ git add <filepattern>
    
    $ git commit --amend
    
    $ git rebase --continue
    
    git commit --amend
    
    $ vim ~/.gitconfig
    
    [alias]
    
        ......
        cm = commit
        reci = commit --amend
        recm = commit --amend
        ......
    
    git commit --amend
    
    git rebase -i <hash of one commit before the wrong commit>
    
    git commit --amend
    
    git rebase --continue
    
    git rebase -i HEAD~5
    
    pick <commit hash> commit message
    
     git commit --amend -m "Your new message"
    
    git commit --amend -m "BRANCH-NAME: new message"
    
    git commit --amend -m "BRANCH-NAME : your new message"
    
    git push -f origin BRANCH-NAME                # Not a best practice. Read below why?
    
     git commit --amend -m "BRANCH-NAME : your new message"
     git pull origin BRANCH-NAME
     git push -f origin BRANCH-NAME
    
    git commit --amend -o -m "New commit message"
    
    git rebase -i @~9   # Show the last 9 commits in a text editor
    
    $ git reset @~3   # Go back three commits
    $ git reflog
    c4f708b HEAD@{0}: reset: moving to @~3
    2c52489 HEAD@{1}: commit: more changes
    4a5246d HEAD@{2}: commit: make important changes
    e8571e4 HEAD@{3}: commit: make some changes
    ... earlier commits ...
    $ git reset 2c52489
    ... and you're back where you started
    
    $ git rebase-reword <commit-or-refname>
    
    $ git rebase-reword b68f560
    $ git rebase-reword HEAD^