Git将我的功能分支重新基化(合并挤压)到另一个分支上
我正在寻找一个git命令来帮助我在特性分支准备进入Master时使用它们。这个git命令会将分支上的所有更改压缩到master上的一个提交中。我今天这样做是因为:Git将我的功能分支重新基化(合并挤压)到另一个分支上,git,git-merge,git-squash,Git,Git Merge,Git Squash,我正在寻找一个git命令来帮助我在特性分支准备进入Master时使用它们。这个git命令会将分支上的所有更改压缩到master上的一个提交中。我今天这样做是因为: git rebase origin/master git rebase -i HEAD~4 其中4是要挤压的提交数。然而,这需要我知道我有多少次提交。我今天通过跑步来做到这一点: git log HEAD...origin/master 然后计算提交的数量 我觉得应该有更好的方法来做这件事。或者其他人也是这样做的?我想您正在寻找g
git rebase origin/master
git rebase -i HEAD~4
其中4是要挤压的提交数。然而,这需要我知道我有多少次提交。我今天通过跑步来做到这一点:
git log HEAD...origin/master
然后计算提交的数量
我觉得应该有更好的方法来做这件事。或者其他人也是这样做的?我想您正在寻找
git merge-squash
。它应该将来自功能分支的提交引入到master并压扁它们,以便您可以创建一个提交。您所要做的就是:
git checkout feature_branch
git rebase master
git checkout master
git merge --squash feature_branch
对于git合并--squash
来说:
生成工作树和索引状态,就像发生了真正的合并一样(合并信息除外),但不要实际进行提交或移动头,也不要记录$GIT_DIR/merge_HEAD以使下一个GIT commit命令创建合并提交。这允许您在当前分支上创建一个提交,其效果与合并另一个分支相同(如果是八达通,则为多个分支)
在此之后,您可以
git commit
提交您已经准备好的更改。以下是我的工作,我是从在大型团队中工作的大量经验中总结出来的:
# 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
希望这有帮助 我不明白。这不正是
git-rebase-i-origin/master&&git-checkout-master&&git-merge
所做的吗?。。。如果您决定在交互重基期间挤压,也就是说,为了计算功能分支和主节点之间的提交次数,您可以执行git log--oneline master..feature-branch | wc-l
可能重复@Abhijeet,这是相同的解决方案,但当我问这个问题时,我不知道壁球的指令。找到另一个问题需要我知道答案。看起来是这样的,尽管在文档中这是一些非常深刻的技术语言。它基本上是说您要从中合并的分支(功能分支)保持不变吗?但随后的合并真的很难看吗?@JohnHinnegan:是的,合并后的分支保持不变。很好。所以,切线问题。若主控球的头球是A,那个么feturebranch会改变B和C。我们在主控球上进行合并——挤压,所以现在是A->BC。然后我们将变更D添加到特征分支并再次尝试挤压,Master是否知道变更BC与变更B和C相同,并且只会将变更D添加到A->BC->D中?@JohnHinnegan:你为什么不自己尝试一下?分支和合并并不昂贵。设置一个测试回购和播放。为了清楚起见,这将把你的“压缩”更改放在暂存区域中,从该区域你向master进行实际的提交这将强制执行一个空的合并提交(在我们需要回滚时很有用)
这是什么意思?