65

In my project (which uses git), I need to use a library, which is still in progress. I decided to create a submodule for that library, because I want to update from time to time its latest version (I don't plan to make my own change there).

I did:

git submodule add https://github.com/mb21/JSONedit.git
git commit -am 'added JSNedit submodule'
git push -u origin master
git pull origin master

Then, I did see the JSONedit folder in my local folder, and a link in my git folder online. But when I did git submodule update --remote JSONedit/, I got the following errors:

fatal: Needed a single revision
Unable to find current origin/master revision in submodule path 'JSONedit'

Does anyone know what's wrong here?

SoftTimur
  • 5,630
  • 38
  • 140
  • 292

8 Answers8

74

Running this in the main repository should do the trick:

git pull --recurse-submodules

According to the other discussion, especially as @Tobu pointed out in his comment over there, if the error persists, it might be needed to first:

remove both the submodule worktree (ext/blah) and the matching folder inside the GIT_DIR (.git/modules/ext/blah)


Alternatively, you could git checkout the branch from which you want to pull while inside the submodule, and then run a git pull.

Results should be the same.

ryenus
  • 15,711
  • 5
  • 56
  • 63
tehp
  • 5,018
  • 1
  • 24
  • 31
  • So if I just do `git pull origin master` in the main repository, it will not pull the submodules, right? – SoftTimur Dec 06 '16 at 04:45
  • 2
    Also I think it should be `git submodule foreach --recursive git pull`, otherwise it gives an error `fatal: Couldn't find remote ref master`. – SoftTimur Dec 06 '16 at 04:48
  • 1
    Actually, does this work for you @SoftTimur `git pull --recurse-submodules`. This is a better approach. – tehp Dec 06 '16 at 04:57
  • it returns `Fetching submodule JSONedit Already up-to-date.`, it seems to work... – SoftTimur Dec 06 '16 at 05:02
37

In my case, the problem was that Git submodule assumed there would be a branch origin/master. Instead, the submodule repository only had a branch main.

I added branch=main to the submodule definition in .gitmodules. After running git submodule sync, git submodule update --remote now works fine.

F1iX
  • 823
  • 6
  • 12
  • This solution worked for me. The submodule clone in a jenkins job is limited w.r.t configuration. – Sudheer Avula Jun 06 '22 at 19:24
  • 1
    this is probably the most common reason at present (2022+) due to the change n default branch naming from `origin/master` to `origin/main` – jaimedash May 11 '23 at 15:33
  • My problem was that `branch` was set to `remotes/origin/master`. Changing it to just `master` resolved the issue. – PitaJ Aug 09 '23 at 17:29
18

I faced the same problem. It got solved. the folder in which the submodule would be stored was there. when I deleted the folder manually, it got resolved.

pranav
  • 499
  • 5
  • 6
10

It seems that this problem was already solved in this thread: Git submodules - pulling into a new clone of the super project. In short you should try:

# rm -rf JSONedit
# git submodule update
Community
  • 1
  • 1
M. Twarog
  • 2,418
  • 3
  • 21
  • 39
8
fatal: Needed a single revision
Unable to find current origin/master revision in submodule path
  • I face this kind of issue...
  • I fix this by updating the git version
Ashish Sondagar
  • 917
  • 1
  • 9
  • 16
3

In my case, error log is

Unable to find current origin/HEADER revision in submodule path 'JSONedit'

This was because my multimodule not recognize submodule's checkout branch. I fix this by setting submodules branch in .gitmodules file.

In multimodule directory

git config -f .gitmodules submodule.{submodule name}.branch {branch name}
git config -f .gitmodules submodule.JSONedit.branch main

I think you probably don't have master instead main. check your branch in submodule directory by command 'git branch'.

Tyler2P
  • 2,324
  • 26
  • 22
  • 31
Suran Lee
  • 46
  • 2
0

In my case, I had deleted and cloned again a project, but the commit stored by git for my submodule did not exist in the origin repository anymore. So I did :

$ rm -rf <submodule name>
$ git clone <submodule url>
$ cd <submodule name> 
$ git checkout <whatever commit/branch you wanted>
$ cd <main project>
$ git add <path/to/submodule>
$ git commit -m "fixed my submodule"
$ git push 
magM
  • 131
  • 1
  • 8
0

I ran into this for a Jenkins build with a submodule that indeed was using origin/main instead of origin/master. I found I was shooting myself in the foot by turning on the option to "Update tracking submodules to tip of branch". Turning it off resolved the error:

Jenkins Advanced sub-modules behavior

In my case this option is not what I actually wanted, since I use specific commit ids in the submodules.

CivFan
  • 13,560
  • 9
  • 41
  • 58