Nei*_*eil 9 git version-control merge rebase pull-request
我试图在一个分支中压缩提交,当它最终合并到主服务器(在拉取请求后如果被批准)提交历史看起来很干净.在提出拉取请求之前我做了一个
git rebase -i
Run Code Online (Sandbox Code Playgroud)
并重写历史.
然而,当在其分支中开发该特征时,我必须将主内容合并到分支上,因为由于其他特征分支被合并,主人通常会向前移动.
我看到我合并master到feature分支我不能压缩他使用交互式rebase再提交.它在拉取请求期间导致异常差异,即作为来自主合并的合并的一部分而发生的变化.
在这种情况下,压缩提交的最佳方法是什么?
pok*_*oke 10
如果你只是想要sqaush所有东西,那么你有一种更简单的方法来做到这一点,而不依赖于使用交互式变基.您只需对主分支进行软重置,然后提交这些更改:
git reset --soft master
git commit -m 'All changes from my branch squashed'
Run Code Online (Sandbox Code Playgroud)
这基本上将分支指针重置为分支master,而不更改工作目录中的任何内容.因此,结果是您可以在索引中进行所有这些更改,然后您可以立即提交.
如果您希望功能分支位于主分支的顶部,以便您的拉取请求包含来自合并的其他功能分支的更改。您可以使用以下命令:
git checkout feature
git pull origin master --rebase
Run Code Online (Sandbox Code Playgroud)
从原始 master 获取后,这将在 master 分支的顶部重新设置功能分支。
我试图将分支中的提交压缩为最终合并到主分支时(如果已批准拉取请求后),提交历史记录看起来很干净
您可以使用它soft reset来压缩您的分支(例如feature)提交。假设您在分支中有 5 个提交feature。现在您需要 5 次提交 = 1 次新提交。
$ 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 -m 'Squash all commits' # squash all the commits
$ git push -f origin feature # force(-f) push to remote since git history is changed
Run Code Online (Sandbox Code Playgroud)
现在,拉取主分支更改。
$ git pull origin master
Run Code Online (Sandbox Code Playgroud)
现在使用 GitHub GUI(浏览器)创建 Pull 请求。