当我使用了一点源代码后,我做了我通常的事情提交,然后推送到远程存储库。但后来我注意到我忘记在源代码中组织导入。因此,我执行modify命令以替换先前的commit:

> git commit --amend

不幸的是,无法将提交推回到存储库。它是这样被拒绝的:

> 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/'

我该怎么办?(我可以访问远程存储库。)


当前回答

您可以通过以下操作以简单、安全的方式进行操作:

使用gitcommit修改您的上一次提交--修改和需要添加的任何选项git pull将本地回购与远程回购同步。拉动后,您将在本地和远程之间发生冲突。您只需接受当前更改并再次提交即可解决这些问题。数字推送

现在,本地和远程回购已更新,无需更改回购历史记录。

其他回答

在这里,我如何修复以前提交中的编辑:

保存您的工作到目前为止。如果做了更改,现在就暂时保存:git Stash现在您的工作副本在上次提交时是干净的。进行编辑和修复。在“修改”模式下提交更改:gitcommit--all--modify您的编辑器将显示一条日志消息(默认情况下,是旧的日志消息)。保存并在满意时退出编辑器。新的更改将添加到旧的提交中。使用git log和git diff HEAD自行查看^重新应用隐藏的更改(如果有):git stash apply

在这种情况下,你应该——用力。

基于:

如果是单个项目,我会这样做:git推送原点<分支名称>-f

如果您正在与您的团队合作,或其他同行正在审查和使用您的代码,则不建议使用强制标志。主要是因为你总是想要一个干净的git历史。

我会怎么做?

如果有更多的人在同一个分支机构工作,或者其他人在审查你的代码,我会gitcommit--modify,然后gitpush-f。。。并让人们知道他们需要获取pull-rebase,以便能够看到您的更改。如果在审查PR或MR时发生类似的情况,请添加新的干净提交,并在结尾处清除历史。

如果您使用的是Visual Studio代码,可以尝试此扩展以使其更容易。

https://marketplace.visualstudio.com/items?itemName=cimdalli.git-提交修改推力

正如您从其名称中可以理解的,它连续执行命令

gitcommit—修改git push—力

下面是一个非常简单和干净的方法,在您已经进行了git添加“您的文件”和git提交后推送您的更改--修改:

git push origin master -f

or:

git push origin master --force

如果您还没有将代码推送到远程分支(GitHub/Bitbucket),可以在命令行上更改提交消息,如下所示。

 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

如果提交消息已经被推送,这是更改提交消息时的最佳做法。