Squash提交闭合请求
问题描述:
我有合并和关闭请求。之后,我删除了该分支。并且该分支的所有提交现在都显示在合并分支的历史记录中。现在有一个选项可以在Git中恢复分支,但我真正想要的是压缩该PR的某些提交,以便它不会显示在合并分支的提交历史记录中。假设最初PR有5次提交并成功合并并关闭。 有没有办法压缩合并和关闭的公关中的一些提交?Squash提交闭合请求
答
你会使用git rebase -i <hash of first commit before merge>
,然后你可以选择挤压相关的提交。注意这是重写实际的提交历史记录,所以如果你与其他人共享存储库,那么在完成这些操作后你会有不同的提交,这是潜在的危险领域。
答
的唯一方法是改变在master
分支历史(假设你的feature/branch
被合并上master
):
$ git checkout master
$ git reset --hard <commit-before-merge>
$ git push -f origin master
现在你可以修改你的历史:
$ git checkout feature/branch
# Hypothesis: 5 commits to squash together
$ git rebase -i HEAD~5
# Rewrite your history: reword, squash, etc...
在这一点,也许你应该重新分配特征/主分支
$ git rebase master
一旦你满意你的分支历史,你可以把上游:
$ git push -f origin feature/branch
然后创建GitHub上一个新的拉请求,并把它合并
重要事项
每个人跟踪分支master
将不得不颁发git pull --rebase
以重新与上游重新同步它们的历史记录,其被改写为:
$ git checkout master
$ git pull --rebase origin master
这将防止任何冲突和/或合并提交将上游历史视为理所当然(接受theirs
),发出快进。
这同样适用于分支仍取决于master
,这将需要相应地重建基础:
$ git checkout feature/branch-still-depending-from-master
$ git rebase master
希望这有助于;)
https://stackoverflow.com/a/47048569/2303202 – max630
我的问题是,我不能直接在合并的分支上更改提交历史记录,因为这是受保护的分支。有没有什么办法可以从封闭的请求或恢复的分支中重写历史? – Akshay
不,如果一个提交是某个分支的历史,那么它是如何发生的。 IT无法将其删除。 – max630