简单来说,一个分支可以从一个远程跟踪分支拉取并推送到另一个分支。
即使您设置了默认的推送策略(git config push.default
),它也会被本地的branch.<name>.push
配置所覆盖。
自 git 2.5 版本以来, 您可以轻松区分用于获取和推送的 refspec(如果没有分支的推送 refspec,则默认为获取 refspec)
例如,如果您在主分支上,并且想要查看与您正在推送到的远程跟踪分支(默认情况下为origin/master
,但如果在配置中设置了branch.master.push
,它可以是任何其他远程跟踪分支)相比较,您是否超前或落后。
git for-each-ref --format="%(push:track)" refs/heads
快捷方式<branch>@{push}
直接指向在配置项branch.master.push
中设置的值。
例如,要查看您尚未推送的提交:
git log @{push}..
注意,在Git 2.22(2019年第二季度)之前,
--format
选项中使用的
%(push:track)
标记在"
git for-each-ref
"和相关工具中未显示正确的分支。
这个问题已经得到解决。
请参见
提交 c646d09(由
Damien Robert (DamienRobert
)于2019年4月16日提交)。
(由Junio C Hamano -- gitster
--于提交 f560a4d中合并,2019年5月8日)
ref-filter
: 使用正确的分支来处理 %(push:track)
在 ref-filter.c
中,当处理 %(push:track)
这个选项时,ahead/behind 值是使用 stat_tracking_info
计算的,而该函数引用了上游分支。
为解决这个问题,在 remote.c
中的 stat_tracking_info
函数中引入一个新标识 for_push
,它与上游分支相同但适用于推送分支。
更新少量调用 stat_tracking_info
的函数以处理该标识。这样可以确保在将来使用该函数时,我们会小心指定应用于上游分支还是推送分支。
警告:在处理 "for-each-ref
" 和相关元素的 "%(push)
" 格式化元素时,当相同的代码路径开始处理 "%(push:<what>)
" 时出现了错误,该错误已在 Git 2.32 (Q2 2021) 中得到纠正。
请参见 提交记录 1e1c4c5(由 ZheNing Hu (adlternative
) 于 2021 年 5 月 11 日提交)
(由 Junio C Hamano -- gitster
-- 在 提交记录 36a255a 中合并,于 2021 年 5 月 20 日)
署名:ZheNing Hu
[jc:进一步测试修复]
署名:Junio C Hamano
used_atom.u
是一个联合体,根据要记录的辅助数据所属的原子类型不同,它具有不同的成员。
最多只能有一个成员在任何时候是有效的。
由于代码在检查 u.remote_ref
时甚至没有确保原子类型是 "push
" 或 "push:
"(这只是 u.remote_ref.push
变为有效的两种情况之一),但 u.remote_ref
与联合体的其他成员共享相同的存储空间,因此该检查读取了无效成员的值,这就是 bug。
在此处修改条件以检查原子名称是否等于 "push
" 或以 "push:
" 开头,以避免读取联合体的无效成员的值。