Git - 如何查找目录中所有项目的所有 "unpushed"提交?

标签 git bash

我终于习惯了 Git,在最初的陡峭学习曲线之后,我必须说它非常好(我只是想念单个文件外部,但那是另一回事了)。然而,我有一个我无法解决的问题:我目前同时在做十几个项目。它们都是相互关联的,我必须从一个跳到另一个,在这里和那里进行更改。

到目前为止一切都很好,我可以很容易地“处理”它们,我会定期提交更改等等。问题是,几个小时后,我不记得我将哪些项目推送到了远程存储库。当然,我可以“cd”到每个项目的目录并发出 push 命令,但这很乏味。我想知道是否有办法使用 bash 来运行类似 git 查找此目录中所有项目中所有未推送的提交。这样的命令将从一个目录运行,该目录不是 Git 存储库,但包含所有项目的树。

逻辑很简单,但实现起来似乎相当复杂,也是因为虽然根目录包含所有项目,但实际的 Git 存储库可以在起始目录的任何级别找到。例如:

  • 项目目录
    • 客户 X
    • project1(Git 仓库)
    • 客户U
    • project2(Git 仓库)
    • 项目3
      • somelibrary(Git 仓库)
      • 主题(Git 存储库)

在此示例中,只有粗体目录是 Git 存储库,因此应在其中运行检查。我知道这个结构看起来有点乱,但实际上很容易处理。

欢迎任何帮助,谢谢。

最佳答案

您可以使用 git cherry 找到未推送的提交,因此您应该能够编写一个 bash 脚本,例如

#!/bin/bash
for file in `find ./ -type d -maxdepth 3` ; do
    cd $file
    git cherry -v
    cd -
done

里面会找到3层子目录,不过可能不太好看。

编辑

正如 Evan 建议的那样,您可以使用子 shell 来避免 cd-ing 返回目录,就像这样

#!/bin/bash
for file in `find ./ -type d -maxdepth 3` ; do
    (cd $file && git cherry -v)
done

您可能想在此处的某处放置一个pwd 命令以查看您所在的文件/目录...

关于Git - 如何查找目录中所有项目的所有 "unpushed"提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12499195/

相关文章:

c++ - 将 bash 脚本的输出返回到调用 C++ 函数

python - 在 Bash 脚本中获取/激活 Python VirtualEnv

git diff 只输出文件名

bash - 在 cloud-init 脚本中以 root 身份为不同用户安装 oh-my-zsh

安卓源码分支

git - Jenkins Git Publisher 标签没有获取环境变量

git - GitHub 如何处理推送安全?

java - 一个人如何既能够使用 IntelliJ 来管理项目的配置,又能拥有一个没有任何 IntelliJ 元数据的 VCS 存储库?

git - CMake 外部项目_添加 Git

bash - 无关紧要时的最佳报价练习?