我们在一个团队中工作,有本地分支,每个人都在自己的分支上工作,并且我们提交了一些分支并使用--squash合并。
现在,我们必须删除那些已经合并到“staging”分支的分支。
问题在于,当我们使用“git diff”命令查看我们的分支时,它显示所有压缩的提交未被合并。
我们使用以下代码获取未合并的分支:
git branch -a --no-merged staging | grep github | cut -d/ -f3 > /not-gihub.txt
谢谢!
我们在一个团队中工作,有本地分支,每个人都在自己的分支上工作,并且我们提交了一些分支并使用--squash合并。
现在,我们必须删除那些已经合并到“staging”分支的分支。
问题在于,当我们使用“git diff”命令查看我们的分支时,它显示所有压缩的提交未被合并。
我们使用以下代码获取未合并的分支:
git branch -a --no-merged staging | grep github | cut -d/ -f3 > /not-gihub.txt
谢谢!
你所观察到的是已记录的行为:来自 man git-merge,
--squash
生成工作树和索引状态,仿佛一个真正的合并发生了(除了合并信息),但实际上不会进行提交、移动HEAD,或记录 $GIT_DIR/MERGE_HEAD(以导致下一个git commit命令创建一个合并提交)。
祖先信息未被记录在Git中,因此您将需要查看代码(可能需要手动)来获取分支是否已合并的信息。
git merge --squash
并不会创建合并提交,并且(正如文档中所说),也不会更新MERGE_HEAD
。也就是说,它仅仅使用合并机制来创建合并后的文件,但不会创建任何合并后的历史记录。 - torek--no-merged
会查找未合并的分支:你已经做对了这一部分。关键在于,“压缩合并”不是真正的合并。名称“压缩合并”非常具有误导性! - torekS
已经被压缩合并到分支B
中,您可以暂时将S
合并到B
中(甚至可以使用“分离头”模式),然后比较生成的树。但是,如果有人解决了合并冲突,这不会完全自动化您的任务。 - torek