57

我正在寻找一个 git 命令来帮助我处理我的功能分支,当它们准备好进入 Master 时。这个 git 命令会将我在分支上的所有更改压缩到 master 之上的单个提交中。我今天这样做:

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

其中 4 是提交到 squash 的次数。但是,这需要我知道我有多少次提交。我今天通过运行:

git log HEAD...origin/master

然后计算提交。

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

4

3 回答 3

92

你所要做的就是:

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

正如文档git merge --squash所说:

生成工作树和索引状态,就好像发生了真正的合并一样(合并信息除外),但实际上并不进行提交或移动 HEAD,也不记录 $GIT_DIR/MERGE_HEAD 以导致下一个 git commit 命令创建合并犯罪。这允许您在当前分支之上创建一个提交,其效果与合并另一个分支相同(或者在章鱼的情况下更多)。

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

于 2012-03-08T22:06:12.033 回答
16

以下是我所做的,从在大型团队中工作的大量经验中收集到的:

# 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

希望这可以帮助!

于 2014-06-05T14:55:54.890 回答
2

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

于 2012-03-08T17:47:37.170 回答