推送后更改git commit消息(假设没有人从远程拉出)

我做了一个git commit和随后的推送。 我想更改提交消息。 如果我理解正确,那么这是不可取的,因为有人在进行此类更改之前可能已经从远程存储库中拉出了。 如果我知道没人拉怎么办?

有没有办法做到这一点?


#1楼

说啊 :

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

然后

git push --force

#2楼

应该注意的是, 如果您将push --force与多个引用一起使用,则它们将全部被修改。 确保注意配置git repo的位置。 幸运的是,有一种方法可以通过指定要更新的单个分支来稍微保护该过程。 从git手册页中读取:

请注意--force适用于所有推送的ref,因此将push.default设置为match或将其与配置了remote的多个推送目标一起使用。*。push可能会覆盖当前分支以外的其他ref(包括本地ref严格落后于他们的远程对等对象)。 要强制只推送到一个分支,请在refspec前面使用+进行推送(例如git push origin + master强制推送到master分支)。


#3楼

如果您要修改较旧的提交而不是最后一个,则需要使用rebase命令,如“ Github帮助页面 ”中的“修改较旧的或多条提交的消息”部分中所述。


#4楼

要编辑最近提交以外的提交:

步骤1git rebase -i HEAD~n HEAD〜n对受影响的最后n提交进行交互式变基。 (即,如果您想更改3次提交的提交消息,请执行git rebase -i HEAD~3

git将弹出一个编辑器来处理这些提交,请注意以下命令:

#  r, reword = use commit, but edit the commit message

那正是我们所需要的!

第二步 :更改pickr你要更新的消息,对于那些提交。 请勿在此处更改提交消息,它将被忽略。 您将在下一步中进行操作。 保存并关闭编辑器。

请注意,如果您编辑了变基“计划”,但它没有开始让您重命名文件的过程,请运行:

git rebase --continue

如果要更改用于交互式会话的文本编辑器(例如,从默认的vi更改为nano),请运行:

GIT_EDITOR=nano git rebase -i HEAD~n

第三步 :Git会弹出你把每一个修改其他编辑器r之前。 根据需要更新提交消息,然后保存并关闭编辑器。

步骤4 :在更新所有提交消息之后。 您可能需要执行git push -f来更新遥控器。


#5楼

命令1

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

然后,

命令2

git push origin --force

#6楼

这对我来说很好

git checkout来源/分支名称

如果您已经在分支中,那么最好进行拉动或变基

git pull

要么

git -c core.quotepath=false fetch origin --progress --prune

以后您可以简单地使用

git commit --amend -m "Your message here"

或者,如果您想打开文本编辑器,请使用

git commit --amend

如果您有很多评论,我将更喜欢使用文本编辑器。 您可以使用命令设置首选的文本编辑器

git config --global core.editor your_preffered_editor_here

无论如何,当您完成更改提交消息后,保存并退出

然后运行

git push --force

你完成了


#7楼

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

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

然后

git push -f

完成:)


#8楼

git commit --amend

然后在当前窗口中编辑和更改消息。 在那之后

git push --force-with-lease

#9楼

另一个选择是创建一个附加的“勘误提交”(并推送),该引用引用包含错误的提交对象-新的勘误提交也提供了更正。 勘误提交是指没有实质性代码更改而是重要的提交消息的提交-例如,在您的自述文件中添加一个空格字符,然后使用重要的提交消息进行更改,或者使用git选项--allow-empty 。 它肯定比重定基础更容易,更安全,它不会修改真实的历史记录,并且可以使分支树保持整洁(如果要更正最新的提交,则使用amend也是一个不错的选择,但是勘误提交可能是一个不错的选择。较旧的提交)。 这种事情很少发生,仅记录错误就足够了。 将来,如果您需要在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

#10楼

如果您使用位桶管道,则针对同一问题的其他信息

编辑您的讯息

git commit --amend

推到服务器

git push --force <repository> <branch>

然后将--force添加到管道上的push命令中

git ftp push --force

这将删除您以前的提交并推送您当前的提交。

第一次推动后移除--force

我在bitbucket管道上尝试过它并且工作正常


#11楼

改变历史

如果这是最新的提交,则可以执行以下操作:

git commit --amend

这将使编辑器显示最后的提交消息,并允许您编辑消息。 (如果要清除旧消息并使用新消息,则可以使用-m 。)

推动

然后,当您按下按钮时,请执行以下操作:

git push --force-with-lease <repository> <branch>

或者,您可以使用“ +”:

git push <repository> +<branch>

或者您可以使用--force

git push --force <repository> <branch>

使用这些命令时要小心。

  • 如果其他人将更改推送到同一分支,则可能要避免破坏这些更改。 --force-with-lease选项是最安全的,因为如果上游有任何更改,它将终止。

  • 如果您未明确指定分支,则Git将使用默认的推送设置。 如果您的默认推送设置为“匹配”,则您可能会同时破坏多个分支上的更改。

之后拉/取

现在,任何已经拉出的人都会收到一条错误消息,并且他们需要通过执行以下操作来更新(假设他们自己没有进行任何更改):

git fetch origin
git reset --hard origin/master # Loses local commits

使用reset --hard时要小心。 如果分支有更改,这些更改将被销毁。

有关修改历史记录的注释

销毁的数据实际上只是旧的提交消息,但是--force不知道,并且也会很乐意删除其他数据。 因此,将--force视为“我想销毁数据,并且我肯定知道要销毁哪些数据”。 但是,当提交已销毁的数据时,通常可以从reflog中恢复旧的提交-数据实际上是孤立的而不是被销毁的(尽管孤立的提交会定期删除)。

如果您不认为自己要销毁数据,请远离--force …… 可能会发生不好的事情

这就是为什么--force-with-lease更安全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值