我做了一个git提交和随后的推送.我想更改提交消息.如果我理解正确,这是不可取的,因为有人可能在我进行此类更改之前从远程存储库中取出.如果我知道没有人拉过怎么办?
有没有办法做到这一点?
当我使用我的源代码工作时,我做了我惯常的事情提交,然后我推送到远程存储库.但后来我注意到我忘了在源代码中组织我的导入.所以我做了修改命令来替换以前的提交:
> git commit --amend
Run Code Online (Sandbox Code Playgroud)
不幸的是,提交不能被推回到存储库.这被拒绝了:
> git push origin
To //my.remote.repo.com/stuff.git/
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to '//my.remote.repo.com/stuff.git/'
Run Code Online (Sandbox Code Playgroud)
我该怎么办?(我可以访问远程存储库.)
如何重写已经推送到私有远程的旧提交的消息?我想保留时间戳和标签.
我在这里找到了这个命令:
git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all
Run Code Online (Sandbox Code Playgroud)
为了保持我添加的标签: --tag-name-filter cat
执行命令时git告诉我:msg过滤失败
我要更改的消息是合并消息"合并分支'发布/ ...'"这是问题吗?
我写了一个不正确的提交消息,我把它推到了遥控器上.有很多问题已经解决了这个问题:
只是一对.但是他们似乎都终止了git push --force
,并且关于为什么这是一个坏主意的额外警告 - 它编辑了历史,这意味着使用存储库的每个人在尝试拉动时都会受到影响.他们似乎并没有说"正确"的事情是什么.
那么处理这种情况的建议或"正确"方法是什么?我以为我可以添加额外的消息git commit --allow-empty
,但据说有" 很少有理由这样做 ".为--allow-empty
确实解决的事情以正确的方式?如果没有,什么是正确的做法?
注意:以"正确的方式"做事可能涉及"承认我搞砸了".作为我正在寻找的一个例子,该git tag
手册页讨论了重复推送标签.它清楚地讨论了重新标记错误标记的提交的方法,给出了推荐的行动方案和一种--force
做事方式.
我添加了错误的提交消息,并推送到Gitlab中的服务器。现在我想更改提交消息。推送到服务器后是否可以更改提交消息?