简单地说,一个分支可以从一个远程跟踪分支中拉出并推送到另一个。
即使您设置了默认推送策略 (git config push.default),that would be overridden by a local branch.<name>.push config。
Since git 2.5,您可以轻松区分用于 fetch 和 push 的 refspec(如果分支没有 push refspec,则默认为 fetch )
例如,如果你在你的 master 分支上,并且想看看你是否领先或落后于你推送到的远程跟踪分支(默认情况下,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”和朋友没有显示正确的分支。
此问题已修复。
参见Damien Robert (DamienRobert) 的commit c646d09(2019 年 4 月 16 日)。
(由 Junio C Hamano -- gitster -- 合并到 commit f560a4d,2019 年 5 月 8 日)
ref-filter:为%(push:track) 使用正确的分支
在ref-filter.c 中,处理原子%(push:track) 时,
前面/后面的值是使用 stat_tracking_info 计算的,它指的是
到上游分支。
通过在 stat_tracking_info 中引入新标志 for_push 来解决此问题
在remote.c 中,它做同样的事情,但对于推送分支。
更新stat_tracking_info 的少数调用者来处理这个标志。这
确保我们以后每次使用这个功能时,小心谨慎
要指定这应该适用于上游还是推送分支。
警告:当相同的代码路径开始处理“%(push:<what>)”时,“for-each-ref”和朋友的“%(push)”格式元素的处理被破坏,这已在 Git 2.32(2021 年第二季度)中更正。
见ZheNing Hu (adlternative)commit 1e1c4c5(2021 年 5 月 11 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit 36a255a,2021 年 5 月 20 日)
签字人:胡哲宁
[jc:进一步的测试修复]
签字人:Junio C Hamano
used_atom.u 是一个联合,它有不同的成员,具体取决于“struct used_atom" 的联合部分要记录的辅助数据是什么原子。
任何时候最多只能有一个成员有效。
由于代码检查u.remote_ref 甚至没有确定原子是“push”还是“push:”(这只是u.remote_ref.push 有效的两种情况),但u.remote_ref 共享相同的存储空间工会成员,检查是从一个无效成员那里读取的,这是错误。
这里修改条件,检查原子名称是否等于“push”或以“push:”开头,避免读取无效联合成员的值。