【问题标题】:List unpushed commits in all branches列出所有分支中未推送的提交
【发布时间】:2016-07-19 16:08:06
【问题描述】:

我目前正在与一个团队一起开展一个项目。这个项目有很多并行开发的分支。

这是我遇到的问题:我在几个分支上工作,尽可能多地提交。显然,有时我在完成分支工作后忘记推送提交。这会导致长时间未推送的更改,当然,团队的其他成员会在这些“未修复”的分支上工作,这可能会导致问题。并且在任何时候,在其他分支上工作时,git 都会告诉我我已经在当前分支之外的其他分支上取消了提交。

是否有类似于git cherry -v 的命令指示所有分支上的未推送提交?

我注意到我可以使用git cherry -v origin/branchA branchA 来显示来自任何分支的分支A 的未推送提交。它非常接近我正在寻找的东西,但我希望它同时适用于所有分支机构。有没有办法将它推广到所有分支? (我不希望记得我忘记推送哪个分支)

【问题讨论】:

  • 它不使用cherry,但git branch -vv提供了一个很好的起点

标签: git push commit


【解决方案1】:

你可以写一个简单的脚本:

(在你的 .bashrc 中)

alias git-list-unpushed='git for-each-ref --format "%(refname)" | grep "refs/remotes" | sed "s@refs/remotes/@@" | while read branch; do echo "$branch"; git cherry -v "$branch" "${branch/origin\//}"; done'

然后您可以运行 git-list-unpushed 以查看每个分支的所有未推送提交的摘要

【讨论】:

  • 我希望能找到一个git命令...但是,我尝试了这个脚本(我对脚本不熟悉,所以我不明白所有内容),它不起作用。我得到了很多垃圾(fatal: Unknown commit 每次提交),我看不到未推送的更改。
【解决方案2】:

基于edi9999的想法,我创建了如下脚本:

#!/bin/sh

branches=$(git for-each-ref --format='%(upstream:short):%(refname:short)' refs/heads)
for raw_branch in $branches; do
  remote_branch=$(cut -d ':' -f 1 <<< "$raw_branch")
  local_branch=$(cut -d ':' -f 2 <<< "$raw_branch")

  echo $local_branch
  if [ "x$remote_branch" == "x" ]; then
    echo WARNING: No remote branch!
  else
    git cherry -v "$remote_branch" "$local_branch"
  fi

  echo
done

因为: 始终存在,所以cut 应该很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-16
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2021-07-07
    • 2016-10-24
    • 2013-10-05
    相关资源
    最近更新 更多