我试图在一个分支中压缩提交,以便在它最终合并到主分支(在拉取请求获得批准后)时,提交历史记录看起来干净。因此,在发起拉取请求之前,我会执行以下操作:
git rebase -i
并重写历史。
然而,在开发功能分支时,我不得不将主分支的内容合并到该分支中,因为主分支通常会因为其他功能分支的合并而前进。
我发现一旦我将主分支合并到功能分支中,就无法再使用交互式变基来压缩提交。这会导致拉取请求期间出现异常差异,即从主分支合并而来的更改。
在这种情况下,最好的方法是压缩提交?
我试图在一个分支中压缩提交,以便在它最终合并到主分支(在拉取请求获得批准后)时,提交历史记录看起来干净。因此,在发起拉取请求之前,我会执行以下操作:
git rebase -i
并重写历史。
然而,在开发功能分支时,我不得不将主分支的内容合并到该分支中,因为主分支通常会因为其他功能分支的合并而前进。
我发现一旦我将主分支合并到功能分支中,就无法再使用交互式变基来压缩提交。这会导致拉取请求期间出现异常差异,即从主分支合并而来的更改。
在这种情况下,最好的方法是压缩提交?
如果你只想压缩所有内容,那么你有一种更简单的方法来完成,而不需要依赖交互式变基。你可以对主分支执行软重置,然后提交这些更改:
git reset --soft master
git commit -m 'All changes from my branch squashed'
这基本上将分支指针重置为master
分支,而不更改工作目录中的任何内容。因此,结果是您在索引中拥有所有这些更改,然后可以一次性提交。
git checkout feature
git pull origin master --rebase
$ 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
$ git pull origin master
--amend
是将当前本地更改与上一个提交(第一次提交)合并。实际上,Git 会采取:最后一次提交 + 当前本地更改 = 生成全新的提交(提交哈希/引用已更改)!@BoltzmannBrain - Sajib Khan
git diff master
所看到的所有内容。如果主分支上有一个你不想还原的新提交,你应该先将这些更改暂时合并到你的分支,然后再进行软重置。 - undefined