2017-11-11 267 views
0

我有合并和关闭请求。之后,我删除了该分支。并且该分支的所有提交现在都显示在合并分支的历史记录中。现在有一个选项可以在Git中恢复分支,但我真正想要的是压缩该PR的某些提交,以便它不会显示在合并分支的提交历史记录中。假设最初PR有5次提交并成功合并并关闭。 有没有办法压缩合并和关闭的公关中的一些提交?Squash提交闭合请求

+0

https://stackoverflow.com/a/47048569/2303202 – max630

+0

我的问题是,我不能直接在合并的分支上更改提交历史记录,因为这是受保护的分支。有没有什么办法可以从封闭的请求或恢复的分支中重写历史? – Akshay

+0

不,如果一个提交是某个分支的历史,那么它是如何发生的。 IT无法将其删除。 – max630

回答

0

你会使用git rebase -i <hash of first commit before merge>,然后你可以选择挤压相关的提交。注意这是重写实际的提交历史记录,所以如果你与其他人共享存储库,那么在完成这些操作后你会有不同的提交,这是潜在的危险领域。

0

的唯一方法是改变在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 

希望这有助于;)