列出未推送更改的 git 存储库

Posted

技术标签:

【中文标题】列出未推送更改的 git 存储库【英文标题】:List git repositories with unpushed changes 【发布时间】:2014-05-09 06:19:31 【问题描述】:

我正在重新安装我的操作系统。我的计算机上有数千个存储库。我有一种感觉,我在一些未提交和/或推送的代码库中进行了一些更改。

从我的 Debian PC 上的 bash shell 中,找到尚未提交/推送到远程的更改列表并决定是否要保留更改的最佳方法是什么?

【问题讨论】:

未提交的更改呢? 抱歉这个愚蠢的评论,但是你好 Greg。我第一次意识到两个人可以有相同的 SO 名称。 【参考方案1】:

您可能喜欢 Ferry Boender 的项目 multi-git-status。

https://github.com/fboender/multi-git-status. “在多个 Git 存储库中显示未提交、未跟踪和未推送的更改。”

【讨论】:

【参考方案2】:

我假设找到每个 repo 并在每个 repo 中运行 git status 足以满足您的需求。在这种情况下,以下可能是您的起点:

find / -name "*.git" -type d -print0 | xargs -0 -L 1 -i% bash -c "cd %/..; pwd; git status -s -uno"

find 遍历您的文件系统,从/ 开始(您可能希望将其限制为~),搜索.git 目录。输出(以 null 分隔以处理有趣的文件名)通过管道传输到 xargs,其中 cds 到每个 repo,打印 pwd 和短格式 git-status,而不列出未跟踪的文件。

【讨论】:

【参考方案3】:

上一个答案找到未提交的,但不是未推送的提交。

这将找到两个:

find / -name "*.git" -type d -print0 | xargs -0 -L 1 -i% bash -c "cd %/..; pwd; git status -s -uno; git cherry -v 2>/dev/null"

git cherry 显示未推送更改的 SHA1; -v 添加提交注释;并且错误重定向会抑制缺少上游的 repos 的嘈杂输出。

【讨论】:

在 Mac 上(使用 zsh)小写 -i 抛出 "xargs: 非法选项 -- i";使用资本我工作:xargs -0 -L 1 -I% bash -c【参考方案4】:

确保检查所有分支

未推送的更改可以存在于检出分支以外的分支中。每个分支也可以有多个上游。

关注相关信息

这种方法借鉴了其他答案,这些答案是非常有用的起点,并省略了一些细节。

find / -name "*.git" -type d -print0 | xargs -0 -L 1 -I% sh -c "cd %/..; pwd; git status -suno; git branch -vvv 2>/dev/null"

上面的单行

列出所有分支,用星号标记已签出的分支 说明何时分离 repo HEAD 显示带有未提交更改的跟踪文件 区分哪些分支有上游,哪些没有 计算每个分支在其上游之前/之后的提交次数 在每个分支上提供最新的 sha 和提交消息

与其他解决方案一样,它还列出了每个 repo 的路径。与其他解决方案不同,它不会在签出分支上列出对未推送提交的引用列表。

示例输出

/dir-with-repo-1
    main  d96c7fcd [origin/main: behind 3] update abcd
  * staging f938e4aa [origin/staging: ahead 2, behind 6] tweak workspace layout
/dir-with-repo-2
  * dev   8b9cec2b [origin/dev] Merge branch 'feature/35-featurename' into 'dev'
    main  b96d6fcd [origin/main: behind 4] update efgh
/dir-with-repo-3
  * hotfix  239f95dc [origin/hotfix] update ijkl
    main    4c92eaa7 [origin/main: behind 7] update klmn
/dir-with-repo-4
  M composer.json
  M composer.lock
  * main 0d2050c add opqr
/dir-with-repo-5
  * (HEAD detached at d3286d57) d3286d57 fix(FunctionComment): Add support for hijk
    1.2.3                       d3286d57 [origin/1.2.3] Add support for hijk

【讨论】:

以上是关于列出未推送更改的 git 存储库的主要内容,如果未能解决你的问题,请参考以下文章

(Git) 如何推送未做任何更改的文件?

Git混淆-如何将本地更改恢复为最新的远程推送?

克隆/推送/从bitbucket存储库中提取错误:403

尝试 couchapp 推送我从团队的 Git 存储库更新的代码时出错

如何将多个 Git 提交(已推送)还原到已发布的存储库?

更改 Git 中推送的凭据