我已经提交了git并随后推送。我想更改提交消息。如果我理解正确,这是不可取的,因为在我进行此类更改之前,可能有人从远程存储库中删除了内容。如果我知道没人拉过呢?

有办法做到这一点吗?


当前回答

我第一次尝试重命名已经推送的大约6条旧提交消息,之后我又做了进一步的提交。

因此,这是最糟糕的案例“案例4:已推送+旧提交”。

我是Vim(现在是Nvim)的用户,也是Vim《逃犯》的超级粉丝。所以我就是这样做的。

这是您在《逃犯》中关于重新定基的一般帮助:

Rebase maps ~

ri                      Perform an interactive rebase.  Uses ancestor of
u                       commit under cursor as upstream if available.

rf                      Perform an autosquash rebase without editing the todo
                        list.  Uses ancestor of commit under cursor as
                        upstream if available.

ru                      Perform an interactive rebase against @{upstream}.

rp                      Perform an interactive rebase against @{push}.

rr                      Continue the current rebase.

rs                      Skip the current commit and continue the current
                        rebase.

ra                      Abort the current rebase.

re                      Edit the current rebase todo list.

rw                      Perform an interactive rebase with the commit under
                        the cursor set to `reword`.

rm                      Perform an interactive rebase with the commit under
                        the cursor set to `edit`.

rd                      Perform an interactive rebase with the commit under
                        the cursor set to `drop`.

r<Space>                Populate command line with ":Git rebase ".

r?                      Show this help.

获取提交列表。:Git日志--单行我想修复第12行的提交消息(4d43a1b构建(MPL-402):editorconfigfixformesages.json),因为它不是正确的常规提交格式。我将光标放在提交哈希4d43a1b上,然后键入rw这将“在光标设置为reword的情况下执行一个交互式rebase和commit”。请注意,与gitrebase-i HEAD~X相比,这是多么好-知道X是什么并不是那么简单。现在,这将为您提供正确的gitrebase命令。所以用:wq写并退出缓冲区然后按照git/逃犯指导的步骤进行操作。我的一个提交出现了合并冲突,我通过正常的fugitve合并冲突过程解决了这个问题。

希望这足以让你度过第一个“我以前从未做过一次重新训练,我到底该做什么?”的难关。如果您需要后续步骤的帮助,请给我留言。

其他回答

在控制台中使用以下两个步骤:

git commit --amend -m "new commit message"

然后

git push -f

完成时间:)

案例1:未推送+最近提交:请参阅

案例2:已推送+最近提交:请参阅

案例3:未推送+旧提交:请参阅

案例4:已推送+旧提交:请参阅

命令1。

git commit --amend -m "New and correct message"

然后

命令2。

git push origin --force

另一个选项是创建一个额外的“勘误表提交”(和推送),它引用包含错误的提交对象——新的勘误表提交也提供了更正。勘误表提交是一种没有实质性代码更改的提交,但有一条重要的提交消息——例如,在自述文件中添加一个空格字符,并使用重要的提交信息提交更改,或者使用git选项——allow empty。它肯定比重定基更容易、更安全,它不会修改真实的历史记录,并且保持了分支树的干净(如果您正在更正最近的提交,那么使用modify也是一个不错的选择,但对于较旧的提交,错误提交可能是一个不错选择)。这种情况很少发生,因此简单地记录错误就足够了。将来,如果您需要在git日志中搜索功能关键字,原始(错误)提交可能不会出现,因为在原始提交中使用了错误的关键字(原始拼写错误)——但是,该关键字将出现在勘误表提交中,然后将您指向具有拼写错误的原始提交。下面是一个示例:

$ git log
commit 0c28141c68adae276840f17ccd4766542c33cf1d
Author: First Last 
Date:   Wed Aug 8 15:55:52 2018 -0600

    Errata commit:
    This commit has no substantive code change.
    This commit is provided only to document a correction to a previous commit message.
    This pertains to commit object e083a7abd8deb5776cb304fa13731a4182a24be1
    Original incorrect commit message:
        Changed background color to red
    Correction (*change highlighted*):
        Changed background color to *blue*

commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4
Author: First Last 
Date:   Wed Aug 8 15:43:16 2018 -0600

    Some interim commit message

commit e083a7abd8deb5776cb304fa13731a4182a24be1
Author: First Last 
Date:   Wed Aug 8 13:31:32 2018 -0600

    Changed background color to red

确保在正确的分支上进行更改

git checkout 

#确保您在正确的分支上进行更改只是为了确定:

git checkout branchname

Then

git commit --amend -m "new message"

然后按下

git push --force