我已经做出了一项承诺,并随后进行了推动。我想更改提交消息。如果我理解正确的话,这是不可取的,因为在我进行这样的更改之前,可能已经有人从远程存储库中取出了。如果我知道没有人拔枪呢?
有办法做到这一点吗?
ndh0cuux1#
如果这是最新的提交,则只需执行以下操作:
git commit --amend
这将调出带有最后一条提交消息的编辑器,并允许您编辑该消息。(如果要删除旧邮件并使用新邮件,可以使用-m。)
-m
然后当你推的时候,这样做:
git push --force-with-lease <repository> <branch>
或者您可以使用“+”:
git push <repository> +<branch>
或者您可以使用--force:
--force
git push --force <repository> <branch>
使用这些命令时要小心。
--force-with-lease
任何已经拉出的用户现在都将收到一条错误消息,并且他们需要通过执行以下操作进行更新(假设他们自己没有进行任何更改):
git fetch origin git reset --hard origin/master # Loses local commits
使用reset --hard时要小心。如果您对分支进行了更改,则这些更改将被销毁。
reset --hard
被破坏的数据实际上只是旧的提交消息,但--force不知道这一点,它也会很高兴地删除其他数据。因此,可以将--force想象为“我想销毁数据,我肯定知道正在销毁的是什么数据。”但是,当被破坏的数据被提交时,您通常可以从reflog中恢复旧的提交-数据实际上是孤立的而不是被销毁的(尽管孤立的提交被定期删除)。
如果你不认为你在破坏数据,那就远离--force…bad things might happen。
这就是--force-with-lease更安全的原因。
ybzsozfc2#
只要说:
git commit --amend -m "New commit message"
git push --force
qnzebej03#
Step1:git rebase -i HEAD~n对最后一个受影响的n提交进行交互rebase。(即,如果您想要更改提交消息3提交回,则执行git rebase -i HEAD~3)
git rebase -i HEAD~n
n
git rebase -i HEAD~3
Git将弹出一个编辑器来处理这些提交,请注意以下命令:
# r, reword = use commit, but edit the commit message
这正是我们需要的!
Step2:对于需要更新消息的提交,将pick改为r。不必费心更改此处的提交消息,它将被忽略。您将在下一步中做到这一点。保存并关闭该编辑器。
pick
r
请注意,如果您编辑了rebase‘plan’,但它没有开始允许您重命名文件的过程,请运行:
git rebase --continue
如果您想要更改用于交互会话的文本编辑器(例如,从默认vi更改为Nano),请运行:
GIT_EDITOR=nano git rebase -i HEAD~n
Step3:Git会为您之前放入r的每个版本弹出另一个编辑器。根据需要更新提交消息,然后保存并关闭该编辑器。
Step4:更新完所有提交消息。您可能需要执行git push -f来更新遥控器。
git push -f
qv7cva1a4#
在控制台使用这两个步骤:
git commit --amend -m "new commit message"
然后
完成:)
ve7v8dk25#
需要注意的是,**如果您使用带有多个引用的push --force,它们将全部被修改。**请务必注意您的git repo被配置为推送到哪里。幸运的是,有一种方法可以稍微保护这个过程,方法是指定一个要更新的分支。请阅读Git手册页:请注意,--force应用于所有推送的引用,因此将其与PUSING一起使用。默认设置为匹配,或将多个推送目标配置为Remote。*.PUSH可能会覆盖当前分支以外的引用(包括严格位于其远程对应项后面的本地引用)。要强制推送到一个分支,请在refSpec前面使用+进行推送(例如,git推送原点+master可强制推送到主分支)。
push --force
nhjlsmyf6#
命令1。
git commit --amend -m "New and correct message"
然后,
命令2。
git push origin --force
7y4bm7vi7#
然后在当前窗口中编辑和更改消息。在那之后就做了
git push --force-with-lease
qv7cva1a8#
如果要修改较旧的提交,而不是最后一个提交,则需要使用rebase命令,如此处的修改旧的或多个提交消息的消息部分中的Github help page所述
rebase
8wtpewkr9#
确保您在正确的分支上进行更改
git checkout
git checkout branchname
git commit --amend -m "new message"
然后按下
7eumitmz10#
1.-$git Commit--Modify-m“New Commit Message。”1.-$git推送--强制租用
10条答案
按热度按时间ndh0cuux1#
更改历史
如果这是最新的提交,则只需执行以下操作:
这将调出带有最后一条提交消息的编辑器,并允许您编辑该消息。(如果要删除旧邮件并使用新邮件,可以使用
-m
。)推流
然后当你推的时候,这样做:
或者您可以使用“+”:
或者您可以使用
--force
:使用这些命令时要小心。
--force-with-lease
选项是最安全的,因为如果有任何上游更改(事后拉取
任何已经拉出的用户现在都将收到一条错误消息,并且他们需要通过执行以下操作进行更新(假设他们自己没有进行任何更改):
使用
reset --hard
时要小心。如果您对分支进行了更改,则这些更改将被销毁。修改历史备注
被破坏的数据实际上只是旧的提交消息,但
--force
不知道这一点,它也会很高兴地删除其他数据。因此,可以将--force
想象为“我想销毁数据,我肯定知道正在销毁的是什么数据。”但是,当被破坏的数据被提交时,您通常可以从reflog中恢复旧的提交-数据实际上是孤立的而不是被销毁的(尽管孤立的提交被定期删除)。如果你不认为你在破坏数据,那就远离
--force
…bad things might happen。这就是
--force-with-lease
更安全的原因。ybzsozfc2#
只要说:
qnzebej03#
要编辑最近提交以外的提交:
Step1:
git rebase -i HEAD~n
对最后一个受影响的n
提交进行交互rebase。(即,如果您想要更改提交消息3提交回,则执行git rebase -i HEAD~3
)Git将弹出一个编辑器来处理这些提交,请注意以下命令:
这正是我们需要的!
Step2:对于需要更新消息的提交,将
pick
改为r
。不必费心更改此处的提交消息,它将被忽略。您将在下一步中做到这一点。保存并关闭该编辑器。请注意,如果您编辑了rebase‘plan’,但它没有开始允许您重命名文件的过程,请运行:
如果您想要更改用于交互会话的文本编辑器(例如,从默认vi更改为Nano),请运行:
Step3:Git会为您之前放入
r
的每个版本弹出另一个编辑器。根据需要更新提交消息,然后保存并关闭该编辑器。Step4:更新完所有提交消息。您可能需要执行
git push -f
来更新遥控器。qv7cva1a4#
在控制台使用这两个步骤:
然后
完成:)
ve7v8dk25#
需要注意的是,**如果您使用带有多个引用的
push --force
,它们将全部被修改。**请务必注意您的git repo被配置为推送到哪里。幸运的是,有一种方法可以稍微保护这个过程,方法是指定一个要更新的分支。请阅读Git手册页:请注意,--force应用于所有推送的引用,因此将其与PUSING一起使用。默认设置为匹配,或将多个推送目标配置为Remote。*.PUSH可能会覆盖当前分支以外的引用(包括严格位于其远程对应项后面的本地引用)。要强制推送到一个分支,请在refSpec前面使用+进行推送(例如,git推送原点+master可强制推送到主分支)。
nhjlsmyf6#
命令1。
然后,
命令2。
7y4bm7vi7#
然后在当前窗口中编辑和更改消息。在那之后就做了
qv7cva1a8#
如果要修改较旧的提交,而不是最后一个提交,则需要使用
rebase
命令,如此处的修改旧的或多个提交消息的消息部分中的Github help page所述8wtpewkr9#
确保您在正确的分支上进行更改
为了确保您在正确的分支上进行更改,请执行以下操作:
然后
然后按下
7eumitmz10#
1.-$git Commit--Modify-m“New Commit Message。”
1.-$git推送--强制租用