Display unpushed commits in git submodules

前提是你 提交于 2021-02-07 21:50:22

问题


I know there is some questions already around there as this one. In my case:

Let's say I have a repo R1 with a submodule SR2.

  1. I do a submodule commit in SR2.
  2. I commit the submodule update in R1
  3. I push the submodule update in R1
  4. I forgot to push in SR2

Then anyone who will clone repository R1 will get a reference is not a tree error, because obviously the submodule commit revision is only available locally currently.

If I then type git status in R1 repository, nothing warns me about the fact that my submodule is ahead of the remote repository.

If there any way to retrieve status recursively?


回答1:


You can try a git submodule foreach command:

git submodule foreach --recursive 'git status  && echo'

You have other commands to show you the status of submodules in this answer, for changes in progress.


The OP Cqnqrd mentions in the comments:

To have better readability, I tweaked it a bit to the following alias:

Multiple-lines:

gss_command='git -c color.status=always status -s | \
             sed "s/^\(.*\)/\t\1/g" && git branch -v | \
             grep -E "ahead|behind" | \
             sed -r "s/[ *]\s(\S*).*(\[(ahead|behind).+?\]).*/\t\1 \2/g"' 

alias gs="git rev-parse --show-toplevel && \
          $gss_command && \
          git submodule foreach --recursive '$gss_command'"

one-liners:

gss_command='git -c color.status=always status -s | sed "s/^\(.*\)/\t\1/g" && git branch -v | grep -E "ahead|behind" | sed -r "s/[ *]\s(\S*).*(\[(ahead|behind).+?\]).*/\t\1 \2/g"' 

alias gs="git rev-parse --show-toplevel && $gss_command && git submodule foreach --recursive '$gss_command'"


来源:https://stackoverflow.com/questions/24547810/display-unpushed-commits-in-git-submodules

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!