仅当分支与 master 不同时如何推送分支?
How to push a branch only if it differs from 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>'
但是他的,显然...,也推动了 "empty" 个分支(即我刚刚创建了一个分支但没有提交它)。
首先,
git for-each-ref --no-merged=master --format='%(refname:short)' refs/heads
将列出所有具有新提交的分支(尚未合并到 master
)。
然后,您可以link将其发送到您的推送命令
git push origin $(git for-each-ref --no-merged=master --format='%(refname:short)' refs/heads)
目标
我只想推送一个与本地主控不同的分支。更具体地说,如果分支指向与本地 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>'
但是他的,显然...,也推动了 "empty" 个分支(即我刚刚创建了一个分支但没有提交它)。
首先,
git for-each-ref --no-merged=master --format='%(refname:short)' refs/heads
将列出所有具有新提交的分支(尚未合并到 master
)。
然后,您可以link将其发送到您的推送命令
git push origin $(git for-each-ref --no-merged=master --format='%(refname:short)' refs/heads)