从master合并后的Squash功能分支提交

时间:2017-02-28 16:25:30

标签: git version-control merge rebase pull-request

我正在尝试将分支中的提交压缩到最终合并到master的时候(如果已经批准了pull请求之后),提交历史记录看起来很干净。在提出pull请求之前我做了一个

git rebase -i

并重写历史。

然而,当在其分支中开发该功能时,我必须将主服务器的内容合并到分支上,因为由于其他功能分支被合并,主服务器通常会向前移动。

我看到我将master合并到功能分支我不能压缩他使用交互式rebase再提交。它会在拉取请求期间导致异常差异,即作为合并的一部分而发生的变化。

在这种情况下,压缩提交的最佳方法是什么?

3 个答案:

答案 0 :(得分:8)

如果您只是想要将所有内容都设置为sqaush,那么您可以采用一种更简单的方式来实现,而不依赖于使用交互式基础。您只需对主分支进行软重置,然后提交这些更改:

git reset --soft master
git commit -m 'All changes from my branch squashed'

这基本上会重置指向master分支的分支指针,而不会更改工作目录中的任何内容。因此,结果是您在索引中拥有了所有这些可以立即提交的更改。

答案 1 :(得分:2)

如果您希望功能分支位于主分支的顶部,那么您的请求包含来自其他功能分支合并的更改。您可以使用以下命令:

CATransaction.setDisableActions(true)

从原始主文件获取后,这将在master分支的顶部修改功能分支。

答案 2 :(得分:0)

  

我正在尝试将分支中的提交压缩到最终合并到主服务器的提交时(在提交请求后如果被批准)提交历史记录看起来很干净

您可以使用feature来压缩您的分支(例如,feature)提交。假设您在$ git checkout feature $ git log # see how many commits do you need to squash $ git reset --soft HEAD~4 # note: if you have N commits then HEAD~{N-1} Or, git reset --soft <first-commit> # reset to first commit of your branch $ git add . # add the files $ git commit --amend -am 'Squash all commits' # squash all the commits $ git push -f origin feature # force(-f) push to remote since git history is changed 分支中有5个提交。现在你需要5次提交= 1次新提交。

$ git pull origin master

现在,Pull master分支发生变化。

public void doGet(HttpServletRequest request , HttpServletResponse response)throws ServletException {
    HttpSession session = request.getSession();
    //todo getSomeThing from DB
    session.setAttribute("userInfo","yourMessage");
    response.sendRedirect("your Page Location");
}

现在使用GitHub GUI(浏览器)创建一个Pull请求。