【问题标题】:How to push a branch only if it differs from master?仅当分支与主分支不同时,如何推送分支?
【发布时间】:2020-02-11 12:58:40
【问题描述】:

目标

我只想推送与本地 master 不同的分支。更具体地说,如果分支指向与本地 master 相同的提交,我不想推送它。

背景

我的公司有数百个 git 存储库,我们不使用 git 子模块,所以对于系统范围的清理,我有一个非常简单的 bash 脚本:

for gitdir in `find ./ -name .git|sort`;
    do 
        workdir=${gitdir%/*}; 
        cd $workdir
        eval "$*"
        cd $BASE_DIR
    done

我是这样跑的:

./for_each_repo.sh 'git checkout -b <bname> && <some command> && git commit -m <message>''

然后我可能会对存储库进行一些其他更改。

最后,我运行:

./for_each_repo.sh 'git push origin <bname>'

但他的,显然......,也推动了“空”分支(即我刚刚创建了一个分支但没有提交它的地方)。

【问题讨论】:

  • 为什么你的进程对每个分支都进行了提交,但分支却没有新的提交?
  • 我可能会删除一些仅存在于某些存储库中的文件。
  • 很公平,我怀疑有类似的事情,但我不想仅仅依靠一个安全的猜测。感谢您的澄清。
  • 我知道这不是最聪明的方法 :)

标签: git git-push multiple-repositories


【解决方案1】:

首先,

git for-each-ref --no-merged=master --format='%(refname:short)' refs/heads

将列出所有具有新提交的分支(尚未合并到 master)。

然后,您可以将其链接到您的推送命令

git push origin $(git for-each-ref --no-merged=master --format='%(refname:short)' refs/heads)

【讨论】:

  • @MicheleDorigatti 这是git branch 的管道对应物。一方面,调整格式非常有用。
猜你喜欢
  • 2016-12-24
  • 1970-01-01
  • 2019-02-02
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 2015-04-02
相关资源
最近更新 更多