Git检查是否有未完成的提交推送

时间:2013-04-11 02:27:12

标签: git version-control

是否有一个命令可以运行以检查是否有任何提交要推送到origin / master?

git [some command] origin master

输出如下内容:

origin/master is behind by 7 commits

4 个答案:

答案 0 :(得分:8)

以下两种方法可列出您拥有的“额外”提交,这些提交不在origin / master上:

git log --oneline origin/master..HEAD
git rev-list --oneline ^origin/master HEAD

--oneline只是以较短的格式列出它们。此外,如果你的分支跟踪起源/主人,一个简单的git status将显示你。

答案 1 :(得分:3)

git diff --stat master origin/master

示例输出:

classes/Mammoth/Article.php                                            |   12 ++++++++++--
classes/Mammoth/Article/Admin/Section/Controller.php                   |   34 +++++++++++++++++-----------------
classes/Mammoth/Article/Filter.php                                     |   14 +++++++-------
classes/Mammoth/Article/Section.php                                    |   18 ++++++++++--------
classes/Mammoth/Article/Section/IMySQL.php                             |    2 +-
migrations/20130411111424_ChangeNameToURIOnSectionsTable.php           |   14 --------------
migrations/sql/up/20130411111424_ChangeNameToURIOnSectionsTable.sql    |    5 -----
solr-core/conf/schema.xml                                              |    2 +-
views/admin/section/form.php                                           |    8 ++++----
views/admin/section/view.php                                           |   10 +++++-----
10 files changed, 55 insertions(+), 64 deletions(-)

答案 2 :(得分:3)

如果你对你的提取是最新的(这里所有其他答案都是假定的)

$ git checkout
Your branch is ahead of 'origin/master' by 9 commits.
  (use "git push" to publish your local commits)

要获取所有分支的信息,

$ git branch -avvv

答案 3 :(得分:0)

我第一次尝试解决这个问题是这样的:

git push --all -n 2>&1 | grep -q 'Everything up-to-date' || 
echo "Outstanding commits to be pushed at $PWD"

它并不健全,因为它会声称存在未完成的错误提交。最大的问题是它会询问用户名/密码,即如果尝试使用https-link推送到github仓库(通常是因为我在某些仓库上进行了RO检查,我不应该直接推送更改)。

jtill的答案似乎最适合我,因为它包含有关如何检查所有分支的说明。因此,我的第二次尝试看起来像这样:

 git branch -avvv 2>&1 | grep -q ': ahead ' && 
   echo "Outstanding commits to be pushed at $PWD"

但是,这也有至少一个警告 - 如果提交消息包含字符串':提前'将会出现误报。

那么我有这个命令用于"检查所有git回购的状态":

for gitrepo in $(find ~ -name '.git')
do 
    cd $(dirname $gitrepo)
    git fetch >/dev/null 2>&1 || 
      echo "Git fetch failed at $PWD"
    git branch -avvv 2>&1 | grep -q ': ahead ' &&
      echo "Outstanding commits to be pushed at $PWD"
done

: - )