如何在拉取请求中压缩提交
Posted
技术标签:
【中文标题】如何在拉取请求中压缩提交【英文标题】:How to squash commits in a Pull request 【发布时间】:2021-05-11 08:03:20 【问题描述】:我有一个关于开源存储库的拉取请求,其中包含一个提交,例如commit a
。现在有人要求我更改该提交中的一些代码。
如果我在我的 android Studio 中打开该分支并更改请求的代码,然后如果我再次提交,将会有两次提交。我想更改代码并且在我的拉取请求中只有一个提交。
我尝试过的事情:
我尝试将 HEAD 重置为 git reset HEAD~2 --soft
的初始提交
然后是git commit -a -m "combined commit message"
,但是当我将此分支推送到我的远程存储库时,会出现一个弹出窗口,上面写着"This branch has conflicts with the remote branch which need to be resolved"
,带有选项merge
和rebase
。我知道那是什么意思。这是因为我正在更改远程分支中的相同代码。所以我想rebase
。然后有一个收到的 commit a
。然后我再次运行git reset HEAD~2 --soft
并再次运行git commit -a -m "I have received the commit and I am combining these two commits again"
,但是当我再次推送它时,会出现相同的弹出窗口。
有什么帮助吗?如何更改相同的代码并在该拉取请求中仍然有一个提交?
【问题讨论】:
为什么不按原样保留分支,并在合并时压缩? @jonrsharpe 我知道贡献者可以从他们身边“挤压和合并”,但他们仍然希望我从我身边挤压。该怎么做? 这能回答你的问题吗? Squash my last X commits together using Git 已经试过了。发生冲突。 你是说当你推的时候?当然有,你正在改变历史。 【参考方案1】:更改代码后,您可以运行 git commit --amend
然后 force push
对您的 fork/branch 进行更改。然后,修改和强制推送将接受更改,但仅在您的 fork/branch 中将其显示为相同的提交。
注意:如果使用 github,更改将在 pull request (PR) 中获取,但会有一个日志说明您在 PR 中强制推送(根据我的经验,维护者的回购协议,我提交的 PR 从未真正指出或提出任何担忧)。
git commit --amend
您无需在此处进行更改。因此,只需将其与相同的消息一起保存,除非您实际上还想更改提交消息。然后强制推送:
git push -f
这将用您的新更改覆盖现有提交(如果在上一步中更改,则新提交消息)
注意:标准且广受欢迎的git force push PSA(公共安全公告)适用 - 谨慎使用强制推送。但是,如果您已经测试过您的代码并且它可以工作,那么您应该没问题。
【讨论】:
以上是关于如何在拉取请求中压缩提交的主要内容,如果未能解决你的问题,请参考以下文章