O Git é um dos sistemas de controle de versão distribuída mais avançados do mundo.
—— Git entusiastas
O Git é uma "ferramenta de gerenciamento de versão distribuída", que possui muitas vantagens: fusão mais conveniente, gerenciamento mais conveniente, sistema mais robusto, menos dependência da rede, menos "poluição do armazém", etc. , O que torna o Git a melhor maneira de desenvolver código de forma colaborativa.
Este artigo apresentará mais de setenta comandos e técnicas Git comumente usados.Vamos dar uma olhada no encanto de um projeto do Github que excede 1,1W de estrelas.
Deve ler
Se você nunca usou o Git antes, pode aprender o tutorial em branco do Git [1] Introdução:
-
Certifique-se de testar o efeito do comando antes de usá-lo no ambiente de trabalho para evitar consequências irreparáveis! Não venha para mim com um facão
-
Todos os comandos estão
git version 2.7.4 (Apple Git-66)
em teste -
Conceito unificado:
-
Área de trabalho: alterações (adição e exclusão de arquivos e conteúdos)
-
Área de armazenamento temporário: digite o comando :,
git add 改动的文件名
essa alteração será colocada na 'área de armazenamento temporário' -
Armazém local (abreviação: local): Digite o comando :,
git commit 此次修改的描述
essa alteração é colocada no 'armazém local', cada confirmação, eu chamo de 'versão'. -
Armazém remoto (abreviação: remote): Digite o comando :,
git push 远程仓库
essa alteração será colocada no 'armazém remoto' (GitHub, etc.) -
commit-id: comando de saída :,
git log
a linha superiorcommit xxxxxx
, a string por trás é commit-id
Diretório
-
Exibir informações de ajuda
-
Voltar ao armazém remoto
-
Redefinir a primeira confirmação
-
Exibir lista de arquivos de conflito
-
Mostrar a diferença entre a área de trabalho e a área de preparação
-
Mostrar a diferença entre a área de preparação e a versão mais recente
-
Mostrar a diferença entre a área de preparação, o espaço de trabalho e a versão mais recente
-
Alterne rapidamente para a ramificação anterior
-
Exclua a ramificação que foi mesclada no mestre
-
Mostrar a situação das filiais locais associadas aos armazéns remotos
-
Filial remota associada
-
Listar todas as ramificações remotas
-
Listar ramificações locais e remotas
-
Exibir a correspondência entre filiais remotas e filiais locais
-
Excluiu a ramificação remotamente e queria excluí-la localmente
-
Crie e mude para a filial local
-
Criar e alternar para uma filial local a partir de uma filial remota
-
Excluir filial local
-
Excluir filial remota
-
Renomear filial local
-
Ver etiquetas
-
Ver detalhes da etiqueta
-
Crie tags localmente
-
Enviar tags para o armazém remoto
-
Excluir marcador local
-
Remover etiquetas remotas
-
Voltar para um rótulo
-
Descartar alterações na área de trabalho
-
Recuperar arquivos excluídos
-
Restaure a modificação de um determinado commit adicionando um novo commit
-
Retorne ao status de uma determinada confirmação e exclua a seguinte confirmação
-
Modifique a descrição do último commit
-
Ver histórico de consolidação
-
Exibir registros de comando git atualizados localmente do HEAD
-
Modificar nome do autor
-
Modifique o URL do armazém remoto
-
Aumentar armazém remoto
-
Listar todos os armazéns remotos
-
Ver alterações dentro de duas semanas
-
Coloque uma confirmação do ramo A no ramo B
-
Alias o comando git
-
Armazene as alterações atuais, mas nenhuma confirmação
-
Salve o estado atual, incluindo arquivos não rastreados
-
Mostrar todos os stashes
-
Voltar para um estado de esconderijo
-
Volte ao estado do último stash e exclua esse stash
-
Excluir todos os stash
-
Retire a modificação de um arquivo do stash
-
Mostrar todos os arquivos rastreados
-
Mostrar todos os arquivos não rastreados
-
Mostrar todos os arquivos ignorados
-
Excluir à força arquivos não rastreados
-
Excluir à força diretórios não rastreados
-
Mostrar histórico de consolidação simplificado
-
Veja quem escreveu um pedaço de código
-
Exportar uma certa ramificação para um arquivo
-
Importar ramificação do pacote
-
Esconder automaticamente antes de executar o rebase
-
No armazém remoto, de acordo com o ID, puxe um determinado estado para a filial local
-
Mostrar detalhes das alterações em uma linha
-
Limpar
.gitignore
arquivo gravado no arquivo -
Mostrar todos os aliases e configurações
-
Mostrar arquivos ignorados
-
O histórico de confirmação mostra que o Branch1 o possui, mas o Branch2 não tem confirmação
-
Mostrar assinatura GPG no log de confirmação
-
Excluir configurações globais
-
Crie e alterne para uma nova ramificação, e essa ramificação não possui nenhuma confirmação
-
Mostrar o conteúdo de um arquivo em qualquer ramificação
-
clonar a ramificação única especificada
-
clonar mais recente confirmação
-
Ignorar alterações em um arquivo
-
Ignorar alterações nas permissões de arquivo
-
Listar todos os ramos Git na ordem do último commit
-
Encontre conteúdo relevante no log de confirmação
-
Coloque o arquivo especificado na área de armazenamento temporário na área de trabalho
-
Forçar pressão
-
git configure o proxy http e socks
-
git configure proxy ssh
-
Uma imagem detalhada
-
Enviar mensagens de confirmação normalmente
-
Entre em contato comigo
Uso de comando
Exibir informações de ajuda
git help -g
A saída do comando como abaixo:
The common Git guides are:
attributes Defining attributes per path
cli Git command-line interface and conventions
core-tutorial A Git core tutorial for developers
cvs-migration Git for CVS users
diffcore Tweaking diff output
everyday A useful minimum set of commands for Everyday Git
glossary A Git Glossary
hooks Hooks used by Git
ignore Specifies intentionally untracked files to ignore
modules Defining submodule properties
namespaces Git namespaces
repository-layout Git Repository Layout
revisions Specifying revisions and ranges for Git
tutorial A tutorial introduction to Git
tutorial-2 A tutorial introduction to Git: part two
workflows An overview of recommended workflows with Git
'git help -a' and 'git help -g' list available subcommands and some concept guides. See 'git help <command>' or 'git help <concept>' to read about a specific subcommand or concept.
Voltar ao armazém remoto
Descarte todas as alterações locais e retorne ao estado do armazém remoto.
git fetch --all && git reset --hard origin/master
Redefinir a primeira confirmação
Ou seja, coloque todas as alterações de volta na área de trabalho e limpe todas as confirmações, para que você possa reenviar a primeira confirmação.
git update-ref -d HEAD
Mostrar a diferença entre o espaço de trabalho e a área de preparação
Área de trabalho de saída diferente (diferente) e área temporária.
git diff
Você também pode exibir alterações de arquivo entre duas confirmações no armazém local:
git diff <commit-id> <commit-id>
Mostrar a diferença entre a área de preparação e a versão mais recente
A diferença entre a área de preparação da saída e a versão mais recente local (confirmação) é diferente.
git diff --cached
Mostrar a diferença entre a área de preparação, o espaço de trabalho e a versão mais recente
Área de trabalho de saída diferenciada (diferente), área de preparação e a versão local mais recente (confirmação).
git diff HEAD
Alterne rapidamente para a ramificação anterior
git checkout -
Remover ramificações que foram mescladas no mestre
git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d
Exibir o status da filial local associada ao armazém remoto
git branch -vv
Filial remota associada
Após a associação, o git branch -vv pode exibir o nome da filial remota associada e o Push diretamente para o armazém remoto: git push, não é necessário especificar o armazém remoto.
git branch -u origin/mybranch
Ou adicione o parâmetro -u ao pressionar
git push origin/mybranch -u
Listar todas as ramificações remotas
O parâmetro -r é equivalente a: remote
git branch -r
Citar ramificações locais e remotas
O parâmetro -a é equivalente a: all
git branch -a
Crie e mude para a filial local
git checkout -b <branch-name>
Crie da filial remota e mude para a filial local
git checkout -b <branch-name> origin/<branch-name>
Remover filial local
git branch -d <local-branchname>
Remover ramificação remota
git push origin --delete <remote-branchname>
Ou
git push origin :<remote-branchname>
Renomear filial local
git branch -m <new-branch-name>
Ver etiquetas
git tag
Exibir a tag mais recente da ramificação atual
git describe --tags --abbrev=0
Ver detalhes da etiqueta
git tag -ln
Crie tags localmente
git tag <version-number>
A tag padrão é a confirmação mais recente.Se você precisar especificar a tag de confirmação:
$ git tag -a <version-number> -m "v1.0 发布 (描述)" <commit-id>
Enviar tag para o armazém remoto
Antes de tudo, precisamos garantir que o rótulo seja construído localmente antes de podermos enviar o rótulo para o armazém remoto:
git push origin <local-version-number>
Envie todas as tags de uma vez e sincronize com o armazém remoto:
git push origin --tags
Remover etiqueta local
git tag -d <tag-name>
Remover etiquetas remotas
Para remover um rótulo remoto, é necessário remover primeiro o rótulo local e, em seguida, execute o seguinte comando:
git push origin :refs/tags/<tag-name>
Voltar para um rótulo
Geralmente, as tags são adicionadas antes de ficar on-line, a fim de evitar problemas depois de ficar on-line e reverter rapidamente para a versão anterior. O comando a seguir retorna ao estado sob um determinado rótulo:
git checkout -b branch_name tag_name
Descartar alterações na área de trabalho
git checkout <file-name>
Descartar todas as alterações:
git checkout .
Recuperar arquivos removidos
git rev-list -n 1 HEAD -- <file_path> # 得到 deleting_commit
git checkout <deleting_commit>^ -- <file_path> # 回到移除文件 deleting_commit 之前的状态
Reverta as alterações de um determinado commit adicionando um novo commit
git revert <commit-id>
Retorne ao status de uma determinada confirmação e remova a seguinte confirmação
Diferença da reversão: O comando reset apagará todas as confirmações após um determinado ID de confirmação
git reset <commit-id> # 默认就是-mixed 参数。
git reset –mixed HEAD^ # 回退至上个版本,它将重置 HEAD 到另外一个 commit, 并且重置暂存区以便和 HEAD 相匹配,但是也到此为止。工作区不会被更改。
git reset –soft HEAD~3 # 回退至三个版本之前,只回退了 commit 的信息,暂存区和工作区与回退之前保持一致。如果还要提交,直接 commit 即可
git reset –hard <commit-id> # 彻底回退到指定 commit-id 的状态,暂存区和工作区也会变为指定 commit-id 版本的内容
Alterar a descrição do último commit
Se houver mudanças na área de preparação, as alterações na área de preparação também serão enviadas para a confirmação anterior
git commit --amend
Ver histórico de consolidação
git log
Ver colaboradores de um pedaço de código
culpa significa "culpa", você sabe.
git blame <file-name>
Exibir registros de comando git atualizados localmente do HEAD
Os comandos git, tais como commint, alterar, selecionar, redefinir, reverter etc., que são atualizados todas as vezes, serão registrados (ramificações ilimitadas), assim como o histórico do shell. Dessa forma, você pode redefinir para qualquer operação após atualizar o HEAD, não apenas para retornar ao estado após uma confirmação na ramificação atual.
git reflog
Alterar nome do autor
git commit --amend --author='Author Name <[email protected]>'
Alterar a URL do armazém remoto
git remote set-url origin <URL>
Aumentar armazém remoto
git remote add origin <remote-url>
Listar todos os armazéns remotos
git remote
Ver alterações dentro de duas semanas
git whatchanged --since='2 weeks ago'
Coloque uma confirmação do ramo A no ramo B
Este processo requer o comando cherry-pick, consulte [2]
git checkout <branch-name> && git cherry-pick <commit-id>
Alias o comando git
Comandos simplificados
git config --global alias.<handle> <command>
比如:git status 改成 git st,这样可以简化命令
git config --global alias.st status
Salve as alterações atuais sem confirmar
Para detalhes, consulte o tutorial git do professor Liao Xuefeng
git stash
Armazene o status atual, incluindo arquivos não rastreados
arquivos não rastreados: arquivos recém-criados
git stash -u
Mostrar todos os stashes
git stash list
Voltar para um estado de esconderijo
git stash apply <stash@{n}>
Volte ao estado do último esconderijo e remova o esconderijo
git stash pop
Remova todo o estoque
git stash clear
Fazer uma alteração de arquivo do stash
git checkout <stash@{n}> -- <file-path>
Mostrar todos os arquivos rastreados
git ls-files -t
Mostrar todos os arquivos não rastreados
git ls-files --others
Mostrar todos os arquivos ignorados
git ls-files --others -i --exclude-standard
Forçar a remoção de arquivos não rastreados
Pode ser usado para remover arquivos recém-criados. Se nenhum nome de arquivo for especificado, todos os arquivos não rastreados em trabalho serão limpos. O comando clean, preste atenção a dois pontos:
1. Após a limpeza, os arquivos removidos não podem ser recuperados
2. Não afeta as alterações nos arquivos rastreados, apenas remova os arquivos não rastreados
git clean <file-name> -f
Forçar a remoção de diretórios não rastreados
Pode ser usado para remover diretórios recém-criados.Nota: Este comando também pode ser usado para remover arquivos não rastreados. Veja o artigo anterior para detalhes.
git clean <directory-name> -df
Mostrar histórico de consolidação simplificado
git log --pretty=oneline --graph --decorate --all
Exportar uma ramificação para um arquivo
git bundle create <file> <branch-name>
Importar ramificação do pacote
Crie uma nova ramificação, o conteúdo da ramificação é o conteúdo exportado pelo comando git bundle create acima
git clone repo.bundle <repo-dir> -b <branch-name>
Esconder automaticamente antes de executar o rebase
git rebase --autostash
No armazém remoto, de acordo com o ID, puxe um determinado estado para a filial local
git fetch origin pull/<id>/head:<branch-name>
Mostrar alterações em uma linha em detalhes
git diff --word-diff
Limpe os arquivos gravados no arquivo gitignore
git clean -X -f
Mostrar todos os aliases e configurações
Nota: a configuração é dividida em: diretório atual (local) e configuração global (golbal), o padrão é a configuração atual do diretório
git config --local --list (当前目录)
git config --global --list (全局)
Mostrar arquivos ignorados
git status --ignored
O histórico de confirmação mostra que o Branch1 o possui, mas o Branch2 não tem confirmação
git log Branch1 ^Branch2
Mostrar assinatura GPG no log de confirmação
git log --show-signature
Remover configurações globais
git config --global --unset <entry-name>
Crie e alterne para uma nova ramificação, e essa ramificação não possui nenhuma confirmação
Equivale a salvar alterações, mas reescrever o histórico de confirmação
git checkout --orphan <branch-name>
Exibir o conteúdo de um arquivo em qualquer ramificação
git show <branch-name>:<file-name>
clonar a ramificação única especificada
git clone -b <branch-name> --single-branch https://github.com/user/repo.git
Ignorar alterações em um arquivo
Desative as alterações no arquivo especificado da faixa, ou seja, o Git não gravará alterações nesse arquivo
git update-index --assume-unchanged path/to/file
Recuperar alterações para rastrear arquivos especificados
git update-index --no-assume-unchanged path/to/file
Ignorar alterações nas permissões de arquivo
Não trate mais as alterações nas permissões de arquivo como alterações
git config core.fileMode false
Listar todos os ramos Git na ordem do último commit
O mais recente está no topo
git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/
Encontre conteúdo relevante no log de confirmação
Localizar por grep, texto fornecido: o campo a ser encontrado
git log --all --grep='<given-text>'
Coloque o arquivo especificado na área de armazenamento temporário na área de trabalho
Nenhum parâmetro adicionado, o padrão é -mixed
git reset <file-name>
Force Push
git push -f <remote-name> <branch-name>