Git rebase(Merge Squash)我的功能分支到另一个分支

Joh*_*gan 52 git git-merge git-squash

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

git rebase origin/master
git rebase -i HEAD~4
Run Code Online (Sandbox Code Playgroud)

其中4是壁球的提交次数.但是,这需要我知道我有多少提交.我今天这样做是通过运行:

git log HEAD...origin/master
Run Code Online (Sandbox Code Playgroud)

然后计算提交.

我觉得应该有更好的方法来做到这一点.或者这也是其他人如何做到的?

eck*_*kes 88

你所要做的就是:

git checkout feature_branch
git rebase master
git checkout master
git merge --squash feature_branch
Run Code Online (Sandbox Code Playgroud)

由于文档git merge --squash说:

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

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

  • @JohnHinnegan:你为什么不亲自尝试?分支和合并并不昂贵.建立一个测试回购并玩. (3认同)
  • 不错.所以,切线问题.如果主人的头是A.然后feturebranch有B和C的变化.我们做了一个合并 - 在master上进行定义,所以现在它是A-> BC.然后我们将更改D添加到功能分支并尝试再次压缩,Master是否知道更改BC与更改B和C相同并且只会将更改D添加到A-> BC-> D? (2认同)

小智 14

以下是我所做的工作,这些工作来自于在大型团队中工作的大量经验:

# 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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • `这会强制一个空的合并提交(如果我们需要回滚的话,这很有用)`你这是什么意思? (2认同)