Git将我的功能分支重新定位(合并壁球)到另一个分支

我正在寻找一个git命令,以帮助我准备好进入Master的功能分支。 此git命令会将我在分支上的所有更改压缩到master上的单个提交中。 我今天用以下方法:

git rebase origin/master
git rebase -i HEAD~4

其中4是壁球的提交次数。 但是,这需要我知道我有多少个提交。 我今天通过运行以下命令来执行此操作:

git log HEAD...origin/master

然后计算提交次数。

我觉得应该有更好的方法来做到这一点。 还是其他人也这样做?

John Hinnegan asked 2020-01-14T11:42:58Z
3个解决方案
88 votes

您要做的就是:

git checkout feature_branch
git rebase master
git checkout master
git merge --squash feature_branch

正如git commit的文档所述:

产生工作树和索引状态,就像发生真正的合并一样(合并信息除外),但实际上不进行提交或移动HEAD,也不记录$ GIT_DIR / MERGE_HEAD导致下一个git commit命令创建合并 承诺。 这使您可以在当前分支的顶部创建一个提交,其作用与合并另一个分支的作用相同(对于章鱼,则更多)。

之后,您可以git commit已经进行的更改。

eckes answered 2020-01-14T11:43:32Z
14 votes

这是我的工作,是从在大型团队中工作的大量经验收集而来的:

# Get latest from master
git checkout master
git pull --rebase

# rebase master into your feature branch
git checkout feature/my-feature
git rebase master --preserve-merges

# merge feature into master
git checkout master

# DO ONLY ONE of the 2 options below
# if you only have one or (maybe) 2 commits in your feature branch
git merge feature/my-feature

# OR
# this forces an empty merge commit (useful if we need to roll things back)
git merge --no-ff feature/my-feature

# if you use Github, this should also close the pull request
git push origin master

希望这可以帮助!

rupakg answered 2020-01-14T11:43:56Z
2 votes

我认为您正在寻找git merge --squash。它应该将功能分支中的提交引入master并压缩它们,以便您可以创建单个提交。

manojlds answered 2020-01-14T11:44:17Z
translate from https://stackoverflow.com:/questions/9622131/git-rebase-merge-squash-my-feature-branch-onto-another-branch