合并+Squash不会改变MERGE_HEAD吗?

3

我们在一个团队中工作,有本地分支,每个人都在自己的分支上工作,并且我们提交了一些分支并使用--squash合并。

现在,我们必须删除那些已经合并到“staging”分支的分支。

问题在于,当我们使用“git diff”命令查看我们的分支时,它显示所有压缩的提交未被合并。

我们使用以下代码获取未合并的分支:

git branch -a --no-merged staging | grep github | cut -d/ -f3 > /not-gihub.txt   

谢谢!


1
我不确定这是否是你真正的问题,但是:git merge --squash并不会创建合并提交,并且(正如文档中所说),也不会更新MERGE_HEAD。也就是说,它仅仅使用合并机制来创建合并后的文件,但不会创建任何合并后的历史记录 - torek
1
@torek,您能告诉我如何确定未合并的确切分支,包括压缩提交吗? - Raza Hussain
1
--no-merged 会查找未合并的分支:你已经做对了这一部分。关键在于,“压缩合并”不是真正的合并。名称“压缩合并”非常具有误导性! - torek
1
@torek 有没有解决这个问题的办法,还是我们必须手动验证代码差异? - Raza Hussain
2
你可能被迫手动验证代码。你可以通过让git生成真正的合并并比较结果树来在一定程度上自动化此过程。例如,如果您认为分支S已经被压缩合并到分支B中,您可以暂时将S合并到B中(甚至可以使用“分离头”模式),然后比较生成的树。但是,如果有人解决了合并冲突,这不会完全自动化您的任务。 - torek
显示剩余2条评论
1个回答

0

你所观察到的是已记录的行为:来自 man git-merge,

--squash

生成工作树和索引状态,仿佛一个真正的合并发生了(除了合并信息),但实际上不会进行提交、移动HEAD,或记录 $GIT_DIR/MERGE_HEAD(以导致下一个git commit命令创建一个合并提交)。

祖先信息未被记录在Git中,因此您将需要查看代码(可能需要手动)来获取分支是否已合并的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接