如何压缩拉取请求中的提交

How to squash commits in a Pull request

我有一个开源存储库的拉取请求,其中包含一次提交,例如 commit a。现在有人要求我更改该提交中的一些代码。 如果我在我的 Android Studio 中打开该分支并更改请求的代码,然后如果我再次提交,将有两次提交。我想更改代码并且在我的拉取请求中只有一个提交。

我尝试过的事情:

我尝试通过 git reset HEAD~2 --soft 将 HEAD 重置为初始提交 然后 git commit -a -m "combined commit message" 但是当我将这个分支推送到我的远程存储库时,会出现一个弹出窗口,其中显示 "This branch has conflicts with the remote branch which need to be resolved" 以及选项 mergerebase。我知道那是什么意思。这是因为我正在更改远程分支中的相同代码。所以我要rebase。然后就是收到了 commit a。然后我再次 运行 git reset HEAD~2 --softgit commit -a -m "I have received the commit and I am combining these two commits again" 但是当我再次按下它时,出现相同的弹出窗口。

有什么帮助吗?如何更改相同的代码并在该拉取请求中仍然有一个提交?

更改代码后,您可以 运行 一个 git commit --amend 然后 force push 更改您的 fork/branch。然后修改和强制推送将进行更改,但仅将其显示为 fork/branch.

中的相同提交

注意:如果使用 github,更改将在拉取请求 (PR) 中获取,但会有一个日志说明您强制推入 PR(根据我的经验,我提交 PR 的 repo 的维护者从未真正指出它或对此提出任何担忧)。

git commit --amend

您无需在此处进行更改。所以只需将它与相同的消息一起保存,除非您实际上还想更改提交消息。然后强制推送:

git push -f

这将用您的新更改覆盖现有提交(如果在上一步中更改,则新提交消息)

注:标准广受欢迎git强推PSA(public安全公告)适用- 小心使用力推。但是,如果您已经测试了您的代码并且它可以正常工作,那么您应该没问题。