Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git将我的功能分支重新基化(合并挤压)到另一个分支上_Git_Git Merge_Git Squash - Fatal编程技术网

Git将我的功能分支重新基化(合并挤压)到另一个分支上

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命令来帮助我在特性分支准备进入Master时使用它们。这个git命令会将分支上的所有更改压缩到master上的一个提交中。我今天这样做是因为:

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进行实际的提交
这将强制执行一个空的合并提交(在我们需要回滚时很有用)
这是什么意思?