I have a git submodule (RestKit) which I have added to my repo.
I accidentally changed some files in there and I'd like to go back to the source version. In order to do that, I tried to run
Mac:app-ios user$ git submodule update RestKit
But as you can see here, this did not work as it is still "modified content":
Mac:app-ios user$ git status
...
# modified: RestKit (modified content)
Even
Mac:app-ios user$ git submodule update -f RestKit
doesn't revert locally modified files.
How do I reset the content of that submodule?
First try this, as others have said:
If that doesn't work, change to the submodule directory and use the following command to see if there are any changes to the submodule:
If there are changes to your submodule, get rid of them. Verify that you can don't see any changes when you run "git status".
Next, go back to the main repository and run "git submodule update --init" again.
For git <= 2.13 these two commands combined should reset your repos with recursive submodules:
do 4 steps sequential:
Since Git 2.14 (Q3 2017), you don't have to go into each submodule to do a
git reset
(as ingit submodule foreach git reset --hard
)That is because git reset itself knows now how to recursively go into submodules.
See commit 35b96d1 (21 Apr 2017), and commit f2d4899, commit 823bab0, commit cd279e2 (18 Apr 2017) by Stefan Beller (
stefanbeller
).(Merged by Junio C Hamano --
gitster
-- in commit 5f074ca, 29 May 2017)git-reset
is yet another working tree manipulator, which should be taught about submodules.Warning: the difference between:
git reset --hard --recurse-submodule
andgit submodule foreach git reset --hard
is that the former will also reset your main parent repo working tree, as the latter would only reset the submodules working tree.
So use with caution.
Well for me, having
just reset the submodule to the state where it checked out, not necessary to the main's repo referenced commit/state. I'll still have "modified contents" like OP said. So, in order to get the submodule back to the corrects commit, I run:
Then when I do
git status
, it's clean on the submodule.