Como faço para remover um submódulo Git?
A propósito, existe uma razão que eu não posso simplesmente fazer
git submodule rm whatever
?
git
git-submodules
R. Martinho Fernandes
fonte
fonte
git rm modulename
erm -rf .git/modules/modulename
.git/config
. A resposta aceita mostra a maneira atualizada de remover completamente um submódulo. Também é explicado de forma mais sucinta nesta resposta: stackoverflow.com/a/36593218/1562138Respostas:
Desde o git1.8.3 (22 de abril de 2013) :
O processo de exclusão também usa
git rm
(desde git1.8.5 de outubro de 2013).Sumário
O processo de remoção em três etapas seria:
Explicação
rm -rf
: Isso é mencionado em Daniel Schroeder 's resposta , e resumidos por Eonil nos comentários :git rm
: Veja commit 95c16418 :git submodule deinit
: Decorre deste patch :Isso cuida se as etapas de (des) inicialização (
.git/config
e.git/modules/xxx
)Desde git1.8.5, o
git rm
leva também cuidar da:add
' etapa que registra o URL de um submódulo no.gitmodules
arquivo: é necessário removê-lo.git rm --cached path_to_submodule
(sem barra)Isso remove o diretório armazenado no índice com um modo especial "160000", marcando-o como um diretório raiz do sub-módulo .
Se você esquecer essa última etapa e tentar adicionar o que era um submódulo como um diretório regular, você receberá uma mensagem de erro como:
Nota: desde o Git 2.17 (Q2 2018), o submódulo git deinit não é mais um script de shell.
É uma chamada para uma função C.
Consulte commit 2e61273 , commit 1342476 (14 de janeiro de 2018) por Prathamesh Chavan (
pratham-pc
) .(Incorporado por Junio C Hamano -
gitster
- in commit ead8dbe , 13 de fevereiro de 2018)fonte
submodule deinit
?.gitmodules
deve estar ok, mas eu ainda verificaria novamente qualquer coisa com o.git
diretório (por exemplo, a configuração local , dentro do seu repositório local: isso não é modificado por agit pull
).gitmodules
entrada e a remoção da entrada especial no índice e pressionar esse repositório, outras pessoas poderão acessá-lo e esse submódulo desaparecerá.git rm submodule
faz exatamente o que você deseja, como outras pessoas já disseram.Na página Tutorial do submódulo Git :
Para remover um submódulo, você precisa:
.gitmodules
arquivo..gitmodules
alterações:git add .gitmodules
.git/config
.git rm --cached path_to_submodule
(sem barra)..git
diretório do submódulo :rm -rf .git/modules/path_to_submodule
git commit -m "Removed submodule <name>"
rm -rf path_to_submodule
Consulte também : etapas alternativas abaixo .
fonte
git submodule rm
simplesmente remove o registro do sub-módulo e ficaria surpreso se o comando também excluísse o repositório local. Quaisquer mudanças locais seriam irremediavelmente perdidas. E talvez outra pessoa pense que apenas os arquivos serão removidos.Apenas uma nota. Desde o git 1.8.5.2, dois comandos farão:
Como a resposta de @Mark Cheverton apontou corretamente, se a segunda linha não for usada, mesmo que você tenha removido o submódulo por enquanto, a pasta remanescente .git / modules / the_submodule impedirá que o mesmo submódulo seja adicionado ou substituído no futuro . Além disso, como o @VonC mencionado,
git rm
fará a maior parte do trabalho em um submódulo.- Atualização (05/05/2017) -
Apenas para esclarecer,
the_submodule
é o caminho relativo do submódulo dentro do projeto. Por exemplo, ésubdir/my_submodule
se o submódulo estiver dentro de um subdiretóriosubdir
.Conforme indicado corretamente nos comentários e outras respostas , os dois comandos (embora funcionais o suficiente para remover um submódulo) deixam um rastro na
[submodule "the_submodule"]
seção.git/config
(a partir de julho de 2017), que pode ser removida usando um terceiro comando:fonte
.git/config
. Consulte stackoverflow.com/a/36593218/1562138 para obter a maneira completa de remover um submódulo.git init && git submodule add <repository> && git rm <name>
deixa para trás a.git/config
entrada e o.git/modules/<name>
diretório e seu conteúdo. Talvez você não tenha inicializado o submódulo antes de removê-lo?A maioria das respostas a esta pergunta está desatualizada, incompleta ou desnecessariamente complexa.
Um submódulo clonado usando o git 1.7.8 ou mais recente deixará no máximo quatro traços de si no seu repositório local. O processo para remover esses quatro rastreamentos é dado pelos três comandos abaixo:
fonte
Passos simples
git config -f .git/config --remove-section submodule.$submodulename
git config -f .gitmodules --remove-section submodule.$submodulename
git rm --cached $submodulepath
rm -rf $submodulepath
rm -rf .git/modules/$submodulename
Observe:
$submodulepath
não contém barras iniciais ou finais.fundo
Quando você faz
git submodule add
isso, ele apenas o adiciona.gitmodules
, mas depois que você o fezgit submodule init
, ele adiciona.git/config
.Portanto, se você deseja remover os módulos, mas conseguir restaurá-lo rapidamente, faça o seguinte:
É uma boa ideia fazer
git rebase HEAD
primeiro egit commit
no final, se você colocar isso em um script.Também dê uma olhada em uma resposta para Posso despovoar um submódulo Git? .
fonte
for dir in directory/*; do git rm --cached $dir; done
.git config -f .git/config -l | cut -d'=' -f1 | grep "submodule.$MODPATH" | sed 's/^submodule\.//' | sed 's/\.url$//'
- - parece que você tem que realmente fazer isso no caso, se há algo confuso, caso contrário apenasgit submodule | grep -v '^+' | cut -d' ' -f3
git submodule | grep '^+' | cut -d' ' -f2
submodulename
entre aspas"submodulename"
.. referindo o.git/config
arquivoAlém das recomendações, eu também precisava
rm -Rf .git/modules/path/to/submodule
adicionar um novo submódulo com o mesmo nome (no meu caso, eu estava substituindo um garfo pelo original)fonte
Para remover um submódulo adicionado usando:
Corre:
É isso aí.
Para versões antigas do git (aproximadamente ~ 1.8.5), use:
fonte
git rm
folhas ainda encher em.git/modules/
. (2.5.4)git rm
, não; Um teste rápido com o 2.5.4 no meu mac atualiza o arquivo .gitmodules, conforme descrito na documentação aqui: git-scm.com/docs/git-rm#_submodules ... mas se você encontrou algum tipo de combinação de plataforma / versão onde isso não acontece, você provavelmente deve apresentar um bug sobre isso.git rm
deixa coisas no.git/modules/
diretório e no.git/config
arquivo (ubuntu, git 2.7.4). Outra resposta funciona 100%: stackoverflow.com/a/36593218/4973698Você deve remover a entrada
.gitmodules
e.git/config
, e remover o diretório do módulo do histórico:Se você escrever na lista de discussão do git, provavelmente alguém fará um shell script para você.
fonte
Você pode usar um alias para automatizar as soluções fornecidas por outras pessoas:
Coloque isso na sua configuração do git e você poderá:
git rms path/to/submodule
fonte
git clone https://github.com/hilbix/empty.git; cd empty; git submodule add https://github.com/hilbix/empty.git one; git mv one two; git rms two
. SEGUNDO: Você deve executar isso a partir do caminho correto.git
os aliases devem funcionar em qualquer lugar da árvore de trabalho (ou falhar normalmente). TERCEIRO:git config -f .git/config
falha nos submódulos, como.git
geralmente há um arquivo lá.Para resumir, é isso que você deve fazer:
Defina
path_to_submodule
var (sem barra):path_to_submodule=path/to/submodule
Exclua a linha relevante do arquivo .gitmodules:
git config -f .gitmodules --remove-section submodule.$path_to_submodule
Exclua a seção relevante de .git / config
git config -f .git/config --remove-section submodule.$path_to_submodule
Desestágio e remova $ path_to_submodule apenas do índice (para evitar a perda de informações)
git rm --cached $path_to_submodule
Rastrear alterações feitas em .gitmodules
git add .gitmodules
Confirmar o superprojeto
git commit -m "Remove submodule submodule_name"
Exclua os arquivos do submodulo agora não rastreados
rm -rf $path_to_submodule
rm -rf .git/modules/$path_to_submodule
fonte
git submodule update
,. E se os caminhos dos submódulos não foram atualizados corretamente (o git lança um erro), remova-os:rm -rf .git/modules/<submodule> && rm -rf <submodule> && git submodule update
Se o submódulo foi adicionado acidentalmente porque você adicionou, confirmou e enviou uma pasta que já era um repositório Git (contido
.git
), você não terá um.gitmodules
arquivo para editar ou qualquer outra coisa.git/config
. Nesse caso, tudo que você precisa é:FWIW , eu também removi a
.git
pasta antes de fazer ogit add
.fonte
Eu achei
deinit
trabalhos bons para mim:Dos documentos do git :
fonte
git
s que conhecemosdeinit
, como a outra resposta remove o.git/modules/submodule
diretório muito cedo, o que parece fazer mais recentegit
s para falhar agora ou depois. Além disso (veja meu comentário aqui), a remoção.git/modules/submodule
pode ser o caminho errado; portanto, essa é uma etapa perigosa, que deve ser tomada mais tarde apenas quandogit
houver reclamações (ou se você tiver 299% de certeza que é isso que deseja, é o caminho correto e realmente necessário).git commit
confirmar alterações em etapas no dir de trabalho:modified .gitmodules
edeleted <submodule-path>
.Depois de experimentar todas as respostas diferentes neste site, acabei com esta solução:
Isso restaura exatamente o mesmo estado de antes de você adicionar o submódulo. Você pode adicionar imediatamente o submódulo novamente, o que não foi possível com a maioria das respostas aqui.
Isso deixa você com uma verificação geral limpa, sem alterações a serem confirmadas.
Isso foi testado com:
fonte
git rm --cached $path
então emrm -rf $path
vez degit rm -r $path
?git submodule add https://github.com/hilbix/empty.git 'dangerous .. submodule'
-> quando você tentar remover 'perigoso .. submodule' com seu script, esta vontaderm -rf ..
que é mais provável não o que você quer ..O que estou fazendo atualmente em dezembro de 2012 (combina a maioria dessas respostas):
fonte
Aqui está o que eu fiz:
1.) Exclua a seção relevante do arquivo .gitmodules. Você pode usar o comando abaixo:
2.) Encene as
.gitmodules
mudanças3.) Exclua a seção relevante de
.git/config
. Você pode usar o comando abaixo:4.) Remova o gitlink (sem barra):
5.) Limpe o
.git/modules
:6.) Comprometa-se:
7.) Exclua os arquivos do submodulo agora não rastreados
fonte
fatal: no submodule mapping found in .gitmodules for path 'submodule_name'
passo 1) deu o primeiro passo no passo 3. Ambos os passos foram necessários. (git v2.8.2)Recentemente, descobri um projeto git que inclui muitos comandos úteis relacionados ao git: https://github.com/visionmedia/git-extras
Instale-o e digite:
Então as coisas são feitas. O diretório do submódulo será removido do seu repositório e ainda existe no seu sistema de arquivos. Você pode então confirmar a alteração como:
git commit -am "Remove the submodule"
.fonte
git delete-submodule
, conformegit-extras
necessário, no caminho para o trabalho. Observe também que eu recomendo não usargit-extras
, pois muitas partes dele são extremamente difíceis e perigosas . O IEgit-delete-submodule
possivelmente remove o caminho errado abaixo.git/modules/*
, pois assume que o módulo e o caminho são idênticos (o que geralmente não é o caso) e não funcionará corretamente se você tentar remover um submódulo dentro de um submódulo.git-extras
pode ser 99% útil, mas não reclame se tudo der errado ao usá-lo. VOCÊ FOI AVISADO!Eu tive que seguir os passos de John Douthat um passo adiante e
cd
entrar no diretório do submódulo e remover o repositório Git:Então eu poderia confirmar os arquivos como parte do repositório Git pai sem a referência antiga a um submódulo.
fonte
git rm --cache
etapa.Aqui estão as 4 etapas que eu achei necessárias ou úteis (primeiro as importantes):
Em teoria ,
git rm
na etapa 1 deve cuidar disso. Felizmente, a segunda parte da pergunta do OP pode ser respondida positivamente um dia (isso pode ser feito em um comando).Mas a partir de julho de 2017, a etapa 2 é necessária para remover os dados;
.git/modules/
caso contrário, você não poderá, por exemplo, adicionar o submódulo no futuro.Provavelmente, você pode se safar das duas etapas acima para o git 1.8.5+, como observou a resposta do tinlyx , pois todos os
git submodule
comandos parecem funcionar.A etapa 3 remove a seção
the_submodule
no arquivo.git/config
. Isso deve ser feito para ser completo. (A entrada pode causar problemas nas versões mais antigas do git, mas não tenho uma para testar).Para isso, a maioria das respostas sugere o uso
git submodule deinit
. Acho mais explícito e menos confuso de usargit config -f .git/config --remove-section
. De acordo com a documentação git-submódulo ,git deinit
:Por último, mas não menos importante, se não o fizer
git commit
, você / poderá receber um erro ao fazê-logit submodule summary
(a partir do git 2.7):Isso independentemente de você executar as etapas 2 ou 3.
fonte
fonte
Acabei de encontrar o arquivo oculto .submodule (esqueci o nome exato), ele tem uma lista ... você pode apagá-los individualmente dessa maneira. Eu tinha apenas um, então o apaguei. Simples, mas pode atrapalhar o Git, já que não sei se há algo anexado ao submódulo. Parece ok até agora, além do problema de atualização usual da libetpan, mas isso (espero) não está relacionado.
Percebeu que ninguém postou apagamento manual, então adicionou
fonte
.gitmodules
Com o git 2.17 e acima, é apenas:
fonte
git 2.17.1
nemgit 2.20.1
. No entanto, usando emgit rm
vez degit add
trabalhar para ambos. Notas:-f
não é necessário se as coisas estiverem limpas. Certifique-se de não usar as opções comgit
se você deseja proteger contra perda de dados não intencional. Observe também que isso deixa.git/modules/{module_name}
no lugar. É uma boa prática mantê-lo lá, porquegit
imprime a ajuda correta (!) Como proceder se algo estiver bloqueado devido a isso.Se você acabou de adicionar o submódulo e, por exemplo, simplesmente adicionou o submódulo errado ou o local errado,
git stash
exclua a pasta. Isso pressupõe que a adição do submódulo seja a única coisa que você fez no repo recente.fonte
Para o benefício do leitor, isso aqui tenta resumir e fornecer um guia passo a passo sobre como fazê-lo, se as coisas não funcionarem conforme o esperado. A seguir, é apresentada a maneira testada e segura da
git
versão2.17
e da versão anterior para se livrar de um submódulo :2.20.1
e Ubuntu 18.042.17.1
."$submodule"
é apenas enfatizar onde colocar o nome e que você deve ter cuidado com espaços e coisas do gênero"$submodule"
pela maneira do Windows de um caminho especificado corretamente para o submódulo. (Eu não sou Windows)Observe que
é o inverso direto para
mas
também é bastante inverso a
porque alguns comandos basicamente precisam fazer mais do que apenas uma coisa:
git submodule deinit -- module
.git/config
git rm
.gitmodules
git submodule add
.git/modules/NAME/
git submodule init
, então as atualizações.git/config
git submodule update
, portanto, check-out não-recursivo do módulo.gitmodules
git submodule update --init --recursive -- module
Isso não pode ser totalmente simétrico, pois mantê-lo estritamente simétrico não faz muito sentido. Simplesmente não há necessidade de mais de dois comandos. Também "puxar os dados" está implícito, porque você precisa, mas a remoção das informações em cache não é feita, porque isso não é necessário e pode limpar dados preciosos.
Isso realmente é intrigante para os recém-chegados, mas basicamente é uma coisa boa:
git
simplesmente faz a coisa óbvia e faz o que é certo, e nem sequer tenta fazer mais.git
é uma ferramenta que deve fazer um trabalho confiável, em vez de ser apenas mais um "Eierlegende Wollmilchsau" ("Eierlegende Wollmilchsau" significa para mim "uma versão maligna de um canivete suíço").Então eu entendo as reclamações das pessoas, dizendo "Por que não faz
git
o óbvio por mim". Isso ocorre porque "óbvio" aqui depende do ponto de vista. Confiabilidade em cada situação é muito mais importante. Portanto, o que é óbvio para você muitas vezes não é a coisa certa em todas as situações técnicas possíveis. Lembre-se de que: AFAICSgit
segue o caminho técnico, não o social. (Daí o nome inteligente: git)Se isso falhar
Os comandos acima podem falhar devido ao seguinte:
git
é muito velho. Então use um novogit
. (Veja abaixo como.)git clean
sentido. Em seguida, limpe seu submódulo usando esse comando. (Ver abaixo.)git
. Então você está no lado escuro e as coisas ficam feias e complicadas. (Talvez o uso de outra máquina conserte.)git
usuário avançado).Possíveis correções a seguir.
Use um mais novo
git
Se a sua máquina for muito antiga, não há
submodule deinit
na suagit
. Se você não deseja (ou pode) atualizar o seugit
, basta usar outra máquina com uma novagit
!git
deve ser totalmente distribuído, para que você possa usar outrogit
para realizar o trabalho:workhorse:~/path/to/worktree$ git status --porcelain
não deve produzir nada! Se isso acontecer, limpe as coisas primeiro!workhorse:~/path/to/worktree$ ssh account@othermachine
othermachine:~$ git clone --recursive me@workhorse path/to/worktree/.git TMPWORK && cd TMPWORK
othermachine:~/TMPWORK$ git commit . -m . && exit
workhorse:~/path/to/worktree$ git fetch account@othermachine:TMPWORK/.git
workhorse:~/path/to/worktree$ git merge --ff-only FETCH_HEAD
. Se isso não funcionar, usegit reset --soft FETCH_HEAD
git status
esteja limpo novamente. Você pode fazer isso porque já o limpou antes, graças ao primeiro passo.Esta
othermachine
pode ser uma VM, ou algum Ubuntu WSL no Windows, qualquer que seja. Mesmo umchroot
(mas suponho que você não seja root, porque se forroot
, deve ser mais fácil atualizar para o mais novogit
).Observe que, se você não pode
ssh
entrar, existem várias maneiras de transportargit
repositórios. Você pode copiar sua árvore de trabalho em um pen drive (incluindo o.git
diretório) e cloná-lo. Clone a cópia, apenas para obter as coisas de uma maneira limpa novamente. Pode ser uma PITA, caso seus submódulos não sejam acessíveis diretamente de outra máquina. Mas há uma solução para isso também:Você pode usar isso multiplicar, e isso é salvo em
$HOME/.gitconfig
. Algo comoreescreve URLs como
para dentro
É fácil se você se acostumar a
git
recursos poderosos como esse.Limpar as coisas primeiro
A limpeza manual é boa, pois dessa forma você talvez detecte algumas coisas que esqueceu.
git status
egit clean -ixfd
é seu amigorm
edeinit
contanto que você puder. Opções (como-f
) paragit
são boas se você é um profissional. Mas como você veio aqui, provavelmente não tem tanta experiência nasubmodule
área. Então é melhor prevenir do que remediar.Exemplo:
Você vê, não há
-f
necessidadesubmodule deinit
. Se as coisas estão limpas, em certogit clean
sentido. Observe também quegit clean -x
não é necessário. Isso significa quegit submodule deinit
remove incondicionalmente arquivos não rastreados que são ignorados. Geralmente é isso que você deseja, mas não se esqueça disso. Às vezes, arquivos ignorados podem ser preciosos, como dados em cache, que levam horas ou dias para serem calculados novamente.Por que nunca remover
$GIT_DIR/modules/<name>/
?Provavelmente, as pessoas desejam remover o repositório em cache, porque têm medo de encontrar um problema posteriormente. Isso é verdade, mas encontrar esse "problema" é a maneira correta de resolvê-lo! Como a correção é fácil e bem feita, você será capaz de viver feliz para sempre. Isso evita problemas mais pesados do que quando você remove os dados por conta própria.
Exemplo:
A última linha gera o seguinte erro:
Por que esse erro? Como
.git/modules/two/
anteriormente foi preenchido em https://github.com/hilbix/empty.git e agora deve ser preenchido novamente de outra coisa, ou seja, https://github.com/hilbix/src.git . Você não verá isso se o preencher novamente em https://github.com/hilbix/empty.gitO que fazer agora? Bem, faça exatamente o que foi dito! Usar
--name someunusedname
.gitmodules
então parecels -1p .git/modules/
dáDessa forma, no futuro, você pode alternar entre ramificações / confirmação e avançar e nunca mais voltará a ter problemas , devido à
two/
existência de dois repositórios upstream diferentes (e possivelmente incompatíveis). E o melhor é: você também mantém os dois em cache localmente.git
).No entanto, se você removeu o diretório em cache, os dois caixas diferentes tropeçarão um no outro, porque você não usará as
--name
opções, certo? Portanto, toda vez que você faz o checkout, talvez seja necessário remover o.git/modules/<module>/
diretório várias vezes. Isso é extremamente complicado e dificulta o uso de algo parecidogit bisect
.Portanto, há um motivo muito técnico para manter esse diretório de módulo como um espaço reservado. As pessoas que recomendam remover algo abaixo
.git/modules/
não sabem melhor ou esquecem de informar que isso cria recursos poderosos, comogit bisect
quase impossíveis o uso de se isso ultrapassar uma incompatibilidade desse sub-módulo.Uma outra razão é mostrada acima. Olhe para o
ls
. O que você vê lá?Bem, a segunda variante do módulo
two/
não está abaixo.git/modules/two/
, está abaixo.git/modules/someunusedname/
! Então, coisas comogit rm $module; rm -f .git/module/$module
estão totalmente erradas! Você deve consultarmodule/.git
ou.gitmodules
encontrar a coisa certa a remover!Portanto, não apenas a maioria das outras respostas cai nessa perigosa armadilha, mas mesmo as
git
extensões muito populares tinham esse bug ( agora está corrigido aqui )! Portanto, é melhor manter as mãos no.git/
diretório, se você não fizer exatamente o que está fazendo!Para sua informação, você provavelmente adivinhou: hilbix é minha conta do GitHub.
fonte
Para resumir, é isso que você deve fazer:
Defina path_to_submodule var (sem barra):
Exclua a linha relevante do arquivo .gitmodules:
Exclua a seção relevante de .git / config
Desestágio e remova $ path_to_submodule apenas do índice (para evitar a perda de informações)
Rastrear alterações feitas em .gitmodules
Confirmar o superprojeto
Exclua os arquivos do submodulo agora não rastreados
Consulte também: Linhas-guia alternativas
fonte
git rm --cached $path_to_submodule
egit add .gitmodules
não? Eu recebi um erro no primeiro comando:fatal: Please stage your changes to .gitmodules or stash them to proceed
porque eu tinha alterações sem etapas no.gitmodules
. Fazendo ogit add .gitmodules
primeiro resolve isso.Isso é fácil:
.gitmodules
git add .gitmodules
git submodule deinit <path to submodule>
git rm <path to submodule>
Você precisará excluir os arquivos do módulo em seu projeto manualmente.
fonte
git submodule deinit <submodule_name>
egit rm <path_to_submodule>
. O último comando exclui automaticamente a entrada dentro do.gitmodules
. Git 2.17Eu criei um script bash para facilitar o processo de remoção. Ele também verifica se há alterações no repositório que não foram salvas e solicita confirmação. Foi testado em
os x
seria interessante saber se funciona como está nas distros linux comuns:https://gist.github.com/fabifrank/cdc7e67fd194333760b060835ac0172f
fonte
Na última versão do git, são necessárias apenas 4 operações para remover o submódulo git.
.gitmodules
git add .gitmodules
git rm --cached <path_to_submodule>
git commit -m "Removed submodule xxx"
fonte
Caso você precise fazer isso em um comando de linha com o script bash, como abaixo:
$ cd /path/to/your/repo && /bin/bash $HOME/remove_submodule.sh /path/to/the/submodule
Crie um arquivo de script bash no
$HOME
diretório chamado ieremove_submodule.sh
:fonte
git rm <submodule path> && git commit
. Isso pode ser desfeito usandogit revert
..gitmodules
arquivo.$GIT_DIR/modules/<name>/
.Fonte:
git help submodules
fonte
Removendo o submódulo git
Para remover um
git
submódulo abaixo de 4 etapas, são necessários..gitmodules
arquivo. A entrada pode ser como mencionado abaixogit add .gitmodules
git rm --cached <path_to_submodule>
.git commit -m "Removed submodule xxx"
e empurre.São necessárias mais 2 etapas adicionais mencionadas abaixo para limpar completamente o submódulo na cópia clonada local.
.git/config
arquivo. A entrada pode ser como mencionado abaixorm -rf .git/modules/path_to_submodule
Essas 5ª e 6ª etapas não criam alterações que precisam ser confirmadas.
fonte
git submodule deinit
git-scm.com/docs/git-submodule#Documentation/…