"Git commit": Principais funcionalidades e suas variações
- #Git
Ao utilizar o comando git commit, iniciamos as variações do HEAD e geramos novos herdeiros diretos, resultando em uma atualização na árvore de nosso projeto. O comando commit tem uma estrutura específica que nos permite organizar nossas atualizações de forma eficaz.
Vamos explorar suas funcionalidades:
Após utilizar o git add para adicionar as mudanças ao índice antes de usar o comando commit.
Ao utilizar a opção -a com o comando commit, automaticamente adicionamos as alterações de todos os arquivos modificados e removemos os arquivos deletados da árvore de trabalho, efetuando o commit de fato.
Outra opção útil é utilizar as opções --interactive ou --patch com o comando commit, permitindo decidir individualmente quais arquivos ou partes de arquivos devem fazer parte do commit, além do conteúdo já no índice, antes de finalizar a operação.
A opção --dry-run pode ser empregada para obter um resumo do que será incluído em qualquer uma das opções mencionadas acima para o próximo commit, fornecendo o mesmo conjunto de parâmetros (opções e caminhos).
Se um erro for encontrado logo após realizar um commit, é possível recuperá-lo utilizando o comando git reset.
As opções descritas abaixo são de autoria do git conforme o link.
Opções: https://git-scm.com/docs/git-commit/pt_BR
-a
--all
Diz ao comando para preparar automaticamente os arquivos que foram modificados e excluídos, porém os novos arquivos que você não informou ao Git não são afetados.
-p
--patch
Utilize a interface interativa do patch para selecionar quais as alterações serão aplicadas ao commit. Para mais detalhes, consulte git-add[1].
-C <commit>
--reuse-message=<commit>
Pega um objeto commit existente e o reutiliza na mensagem do registro log, assim como as informações da autoria (incluindo o registro de data e hora) durante a criação de um commit.
-c <commit>
--reedit-message=<commit>
Como -C, porém com -c o editor é chamado para que o usuário possa editar ainda mais a mensagem do commit.
--fixup=<commit>
Constrói a mensagem de um commit para utilizar com rebase --autosquash. A mensagem do commit será o assunt da linha a partir de um determinado commit com um prefixo "fixup! ". Para mais detalhes, consulte git-rebase[1].
--squash=<commit>
Constrói a mensagem de um commit para utilizar com rebase --autosquash. A linha do assunto da mensagem do commit é retirada de um determinado commit com um prefixo "squash! ". Pode ser usado com as opções adicionais das mensagens dos commits (-m/-c/-C/-F). Para mais detalhes, consulte git-rebase[1].
--reset-author
Quando utilizado com as opções -C/-c/--amend, ou ao fazer o commit após uma escolha seletiva conflitante, declare que a autoria do commit resultante agora pertence a quem fez o commit. Isso também renova o registro de data e hora do autor.
--short
Ao executar um ensaio, informe a saída no formato curto. Para mais detalhes, consulte git-status[1]. Implica no uso da opção --dry-run.
--branch
Exibe o ramo e a informação de rastreio quando estiver em formato curto.
--porcelain
Ao executar um ensaio, informe a saída no formato porcelana. Para mais detalhes, consulte git-status[1]. Implica no uso da opção --dry-run.
--long
Ao executar um ensaio, informe a saída no formato curto. Implica no uso da opção --dry-run.
-z
--null
Ao exibir a condição de saída short ou porcelain, imprima o nome do arquivo literalmente e termine as entradas com um NUL, em vez do LF. Caso nenhum formato de saída seja informado, implica no uso da opção --porcelain. Sem a opção -z, os nomes dos arquivos com caracteres "incomuns" serão citados conforme explicado nas variáveis de configuração core.quotePath (consulte git-config[1]).
-F <arquivo>
--file=<arquivo>
Pega a mensagem de commit vindo de um determinado arquivo. Utilize - para ler a mensagem da entrada padrão.
--author=<autor>
Sobrescreva o commit do autor. Defina o autor de forma explicita usando o formato padrão Chiquinha <chiquinha@examplo.com>. Caso contrário, assume-se que a predefinição seja <autor> que é usado para localizar um commit já existente feito através deste autor (ou seja, rev-list --all -i --author=<autor>); o autor do commit é copiado a partir do primeiro commit que for encontrado.
--date=<data>
Substitua a data do autor que foi utilizada no commit.
-m <msg>
--message=<msg>
Usa a <msg> como a mensagem de commit. Caso múltiplas opções -m sejam usadas, o seu conteúdo será disposto em parágrafos separados.
A opção -m é utilizado em conjunto exclusivamente com -c, -C e -F.
-t <arquivo>
--template=<arquivo>
Ao editar a mensagem do commit, inicie o editor com o conteúdo do arquivo informado. A variável de configuração commit.template é frequentemente utilizada para fornecer esta opção de forma implícita ao comando. Esse mecanismo pode ser utilizado por projetos que desejam orientar os participantes com algumas dicas sobre o que escrever na mensagem e em qual ordem. Aborte o commit caso o usuário saia do editor sem editar a mensagem. Não qualquer efeito quando uma mensagem é dada por outros meios, por exemplo, com as opções -m ou -F.
-s
--signoff
Adicionar uma linha assinado pela pessoa que fez o commit no final do registro log do commit assinado. O significado de uma aprovação depende do projeto, porém normalmente certifica que a pessoa que fez o commit tem o direito de enviar este trabalho sob a mesma licença e concorda com um Certificado de Origem do Desenvolvedor (consulte http://developercertificate.org/ para obter mais informações).
-n
--no-verify
Esta opção ignora os ganchos dos commits anteriores e os ganchos das mensagens de commit. Consulte também githooks[5].
--allow-empty
Geralmente, ao gravar um commit que tenha exatamente a mesma árvore como se fosse a sua origem, é um erro, o comando impede que você faça um commit desta natureza. Esta opção ignora a segurança e deve ser utilizada principalmente por scripts SCM externos.
--allow-empty-message
Como a opção --allow-empty, este comando é principalmente para uso por scripts de interface SCM externos. Permite criar um commit com uma mensagem vazia sem usar os comandos de "encanamento" como git-commit-tree[1].
--cleanup=<modo>
Esta opção determina como a mensagem que foi informada ao commit deve ser limpa antes do commit ser feito. O <modo> pode ser strip, whitespace, verbatim, scissors ou default.
strip (tirar/remover)
Retira as linhas vazias no inicio e no final, e os rastros dos espaços finais, os comentários e reduza as linhas vazias consecutivamente.
whitespace (espaço)
O mesmo que strip, exceto que o #comentário não é removido.
verbatim (íntegra)
Não altera a mensagem de forma alguma.
scissors (tesouras)
O mesmo que whitespace (espaço), exceto que tudo incluindo a linha encontrada abaixo seja truncada caso a mensagem precise ser editada. "#" pode ser personalizada com core.commentChar.
default
O mesmo que strip caso a mensagem esteja para ser editada. Caso contrário, whitespace (espaço).
A predefinição pode ser alterada através da variável de configuração commit.cleanup (consulte git-config[1]).
-e
--edit
A mensagem obtida do arquivo com a opção -F, da linha de comando com a opção -m e do objeto commit com C é normalmente utilizada como a mensagem de registro log do commit não modificado. Esta opção permite editar ainda mais a mensagem retirada destas fontes.
--no-edit
Utilize a mensagem do commit selecionado sem rodar um editor. Por exemplo, git commit --amend --no-edit altera um commit sem alterar o conteúdo da mensagem do mesmo.
--amend
Substitua o cume do ramo atual criando um novo commit. A árvore gravada é preparada como de costume (incluindo a aplicação das opções -i e -o; e pathspec explicitamente), a mensagem do commit original é utilizada como um ponto de partida, em vez de uma mensagem vazia. Quando nenhuma outra mensagem é utilizada na linha de comando através de opções como -m, -F, -c, etc. O novo commit possuirá as mesmas origens e seu respectivo autor como o atual (a opção --reset-author pode ser utilizada para mudar isso).
É grosseiramente um equivalente para:
$ git reset --soft HEAD^
$ ... faça qualquer outra coisa para encontrar a árvore certa ...
$ git commit -c ORIG_HEAD
mas pode ser utilizado para corrigir a mesclagem de um commit.
Você deve entender as implicações de sobrescrever o histórico caso corrija um commit que já tenha sido publicado. (Consulte a seção "RECUPERANDO DO UPSTREAM REBASE" no git-rebase[1].)
--no-post-rewrite
Ignore o gancho de reescrita de postagem.
-i
--include
Antes de fazer um commit dos conteúdos preparados até o momento, prepare também o conteúdo dos caminhos utilizados na linha de comando. Isso geralmente não é o que você quer, a menos que esteja concluindo um mesclagem conflitante.
-o
--only
Faça um commit utilizando o conteúdo atualizado da árvore de trabalho dos caminhos definidos na linha de comando, desconsiderando qualquer outro conteúdo que tenha sido preparado para os outros caminhos. Essa é a maneira predefinida de operação do comando git commit caso algum outro caminho tenha sido informado na linha de comando; nesse caso, essa opção poderá ser omitida. Caso esta opção seja utilizada junto com --amend, nenhum outro caminho precisará ser informado, o que pode ser utilizado para alterar o último commit sem confirmar as alterações que já foram preparadas. Se utilizado junto com a opção`--allow empty` também não são necessários e um commit vazio será criado.
--pathspec-from-file=<arquivo>
O "pathspec" é passado com <arquivo> em vez dos argumentos da linha de comando. Caso o <arquivo> seja exatamente -, a entrada padrão será utilizada. Os elementos do "pathspec" são separados por caracteres de término de linha LF ou CR/LF. Os elementos do "pathspec" podem ser citados conforme explicado na variável de configuração core.quotePath (consulte git-config[1]). Consulte também opção --pathspec-file-nul e o global --literal-pathspecs.
--pathspec-file-nul
Só faz algum sentido caso seja utilizado junto com a opção --pathspec-from-file. Os elementos "pathspec" são separados com caracteres NUL e todos os outros caracteres são considerados de forma literal (incluindo as novas linhas e as citações).
-u[<modo>]
--untracked-files[=<modo>]
Exibe arquivos sem rastreamento.
O parâmetro <modo> é opcional, a predefinição retorna para all (todos), sendo utilizado para determinar a manipulação dos arquivos que não foram rastreados; quando a opção -u não é utilizada a predefinição retorna para normal, ou seja, exibe os arquivos e diretórios que não foram rastreados.
As opções disponíveis são:
no - Não exibe qualquer arquivo que não tenham sido rastreados
normal - Exibe todos os arquivo e diretórios que não foram rastreados
all - Exibe todos os arquivos individualmente nos diretórios não rastreados.
A predefinição pode ser alterada utilizando a variável de configuração status.showUntrackedFiles documentada em git-config[1].
-v
--verbose
Exibe as diferenças unificadas entre o commit no HEAD e o que seria feito o commit na parte inferior do modelo da mensagem do commit para ajudar o usuário a descrever o commit lembrando quais as alterações que o commit possui. Note que esta saída "diff" não tem suas linhas prefixadas com #. Este "diff" não fará parte da mensagem do commit. Consulte a configuração da variável commit.verbose em git-config[1].
Caso seja utilizado duas vezes exibirá além do diferencial unificado entre o que seriam feitos os commits e os arquivos da árvore de trabalho, ou seja, as alterações não-estáticas nos arquivos rastreados.
-q
--quiet
Suprimir a mensagem de resumo do commit.
--dry-run
Não crie um commit porém exiba uma lista dos caminhos onde os commits devem ser feitos, os caminhos com as alterações locais onde os commits serão deixados de lado e os caminhos que não serão rastreados.
--status
Inclua a saída do git-status[1] na mensagem do commit ao usar um editor para preparar a mensagem do commit. A predefinição retorna para ligado, porém pode ser utilizado para substituir a variável de configuração commit.status.
--no-status
Não inclua a saída do git-status[1] no modelo da mensagem do commit ao utilizar um editor para preparar a mensagem predefinida do commit.
-S[<keyid>]
--gpg-sign[=<keyid>]
--no-gpg-sign
Commits assinados com o GPG O argumento keyid é opcional e a predefinição retorna para a identidade de quem fez o commit; caso seja utilizado, deve estar anexado a opção e sem espaço. A opção --no-gpg-sign é útil para revogar a variável de configuração commit.gpgSign e a anterior --gpg-sign.
--
Não interprete mais argumentos como opções.
<pathspec>…
Quando o pathspec é utilizado na linha de comando, faça o commit do conteúdo dos arquivos que correspondem ao pathspec sem registrar as alterações já adicionadas ao índice. O conteúdo desses arquivos também é preparado para o próximo commit, além do que já foi preparado anteriormente.
Para mais detalhes sobre a sintaxe <pathspec>, veja a entrada pathspec em gitglossary[7].
Conclusão
Em resumo, o comando git commit é essencial para o fluxo de trabalho do Git, permitindo que os desenvolvedores registrem suas alterações de forma organizada e eficiente. Ao explorar as funcionalidades e variações deste comando, podemos maximizar sua utilidade em nosso processo de desenvolvimento.
Em última análise, compreender e aproveitar ao máximo as funcionalidades do git commit pode aumentar a eficiência e a qualidade de nosso trabalho colaborativo em equipe, garantindo que nossos projetos sejam mantidos de forma organizada e confiável.
Por meio da aplicação dessas práticas recomendadas, podemos fortalecer nossa capacidade de gerenciar o versionamento de código de forma eficaz e colaborativa, contribuindo para o sucesso de nossos projetos de software.