No trabalho diário, as operações Git são frequentemente usadas. Mas, para os recém-chegados, eu era novo no Git quando vim pela primeira vez, e a operação também era muito estranha. Este artigo é voltado principalmente para iniciantes que estão apenas começando a entrar em contato com o Git, entender os princípios básicos do Git e dominar alguns comandos comumente usados.
Um, fluxo de trabalho Git
O acima inclui alguns comandos simples e comumente usados, mas não se preocupe com eles primeiro, vamos primeiro entender os seguintes 4 nomes próprios.
-
Espaço de trabalho: espaço de trabalho
-
Índice / Estágio: Área de armazenamento temporário
-
Repositório: área do armazém (ou armazém local)
-
Remoto: armazém remoto
Área de trabalho
As alterações de desenvolvimento feitas pelos programadores são o que você vê atualmente e também são as mais recentes.
Normalmente, nosso desenvolvimento consiste em copiar uma filial em um warehouse remoto e desenvolver com base nessa filial. No processo de desenvolvimento está o funcionamento do espaço de trabalho.
cache de armazenamento
No arquivo de índice sob o diretório .git, a área de armazenamento temporário registrará git add
as informações relevantes (nome do arquivo, tamanho, carimbo de data / hora ...) do arquivo adicionado, sem salvar a entidade do arquivo e apontando para cada entidade do arquivo por id. Você pode usar para git status
ver o status da área de preparação. A área de teste marca qual conteúdo em seu espaço de trabalho atual é gerenciado pelo git.
Quando você precisa enviar para um warehouse remoto após concluir um determinado requisito ou função, a primeira etapa git add
deve ser gerenciada pelo git , enviando-o primeiro para a área de teste.
Armazém local
Salve as versões enviadas do objeto, que são mais antigas que o conteúdo da área de trabalho e da área de armazenamento temporário.
git commit
Depois de sincronizar a árvore de índice com o warehouse local, é conveniente git push
sincronizar o warehouse local com o warehouse remoto a partir da próxima etapa .
Armazém remoto
O conteúdo de um armazém remoto pode ser modificado por armazéns locais em um relacionamento colaborativo distribuído em vários locais, portanto, pode ou não ser sincronizado com o armazém local, mas seu conteúdo é o mais antigo.
resumo
-
Qualquer objeto nasce e é modificado no espaço de trabalho;
-
Qualquer modificação é controlada por versão após entrar na área de índice;
-
Somente ao enviar a modificação ao warehouse local, a modificação pode deixar um rastro no warehouse;
-
Compartilhe as alterações locais com os colaboradores e envie-as a depósitos remotos para compartilhamento.
A figura a seguir explica mais diretamente a relação entre as quatro áreas, alguns comandos podem não ser claros, não importa, a próxima parte apresentará em detalhes.
Dois comandos Git comumente usados
Encontrei uma imagem na Internet, e uma imagem compilada por outra pessoa é muito boa e eu a peguei emprestada para usar. Alguns comandos comuns são explicados em detalhes abaixo.
CABEÇA
Antes de entender os comandos específicos, entenda primeiro o HEAD.
HEAD, ele sempre aponta para o último ponto de confirmação do branch atual. Se o branch em que você está muda, ou um novo ponto de confirmação é gerado, o HEAD mudará de acordo.
adicionar
Os comandos relacionados ao add são muito simples e, principalmente, percebem que o conteúdo modificado do espaço de trabalho é submetido à área de armazenamento temporário e gerenciado pelo git.
git add. | Adicione todos os arquivos do diretório atual à área de armazenamento temporário |
---|---|
git add <dir> | Adicione o diretório especificado à área de armazenamento temporário, incluindo subdiretórios |
git add <file1> | Adicione o arquivo especificado à área de teste |
comprometer
Os comandos relacionados ao commit também são muito simples.Eles implementam principalmente o envio do conteúdo da área de armazenamento temporário ao warehouse local e fazem o HEAD do branch atual retroceder um ponto de commit.
git commit -m <message> | Envie a área de armazenamento temporário para o armazém local, e a mensagem representa a informação |
---|---|
git commit <file1> -m <message> | Envie os arquivos especificados na área de armazenamento temporário para o armazém local |
git commit --amend -m <message> | Use um novo commit para substituir o commit anterior |
ramo
Quando se trata de colaboração, as ramificações estão naturalmente envolvidas.A respeito das ramificações, provavelmente há quatro operações: exibir ramificações, alternar ramificações, criar ramificações e excluir ramificações.
ramo git | Liste todas as filiais locais |
---|---|
git branch -r | Listar todas as filiais remotas |
git branch -a | Liste todas as filiais locais e remotas |
branch do git <branch-name> | Crie uma nova ramificação, mas ainda permaneça na ramificação atual |
git checkout -b <branch-name> | Crie um novo branch e mude para aquele branch |
branch git --track <branch> <remote-branch> | Crie uma nova filial e estabeleça uma relação de rastreamento com a filial remota especificada |
git checkout <branch-name> | Mudar para o branch especificado e atualizar o espaço de trabalho |
git branch -d <branch-name> | Excluir ramo |
git push origin --delete <branch-name> | Excluir filial remota |
Embora haja muitas operações em filiais, elas são relativamente simples e fáceis de lembrar.
fundir
O comando merge mescla diferentes ramos. Conforme mostrado na figura acima, na abertura real, podemos cortar um branch do branch master e, em seguida, desenvolver para completar os requisitos. No meio, os registros de commit de R3, R4, R5 são passados e, finalmente, o desenvolvimento é concluído e precisa ser mesclado no master. Isso usa mesclagem .
git fetch <remote> | Extraia o código mais recente do armazém remoto antes de mesclar |
---|---|
git merge <branch> | Mesclar o branch especificado com o branch atual |
Geralmente, o conflito aparecerá após a fusão e você precisa resolvê-lo manualmente em resposta ao conflito. Principalmente porque dois usuários modificaram a mesma área do mesmo arquivo. Conforme mostrado na figura abaixo, ele precisa ser liberado manualmente.
rebase
Rebase, também conhecido como rebase, é outra opção para mesclar.
No início, estamos no novo branch e executamos git rebase dev
, então os novos commits no novo branch são repetidos no branch master e, finalmente, o checkout volta para o novo branch. É o mesmo que mesclar. O branch antes e depois da mesclagem não mudou. git rebase dev
, A explicação popular é que o novo ramo quer se apoiar no dev para continuar. Rebase também requer resolução de conflito manual.
A diferença entre rebase e mesclagem
Agora temos esses dois ramos, teste e mestre, apresentados da seguinte forma:
D---E test
/
A---B---C---F master
Execute no mestre git merge test
, e então você obterá os seguintes resultados:
D--------E
/ \
A---B---C---F----G test, master
Execute no mestre git rebase test
e obtenha os seguintes resultados:
A---B---D---E---C'---F' test, master
Como você pode ver, a operação de mesclagem gerará um novo nó e os envios anteriores serão exibidos separadamente. A operação de rebase não gera novos nós, mas mescla as duas ramificações em uma submissão linear.
Se você quer uma árvore de histórico linear limpa sem merge commit, então você deve escolher git rebase.
Se você quiser manter um histórico completo e evitar o risco de reescrever o histórico de commit, você deve escolher usar git merge
Redefinir
O comando reset aponta a ramificação atual para outro local e altera a área de trabalho e a área de armazenamento temporário de acordo.
git reset —soft <commit> | Apenas o ponto de confirmação é alterado e o conteúdo da área de armazenamento temporário e o diretório de trabalho não são alterados |
---|---|
git reset —mix <commit> | Altere o ponto de confirmação e altere o conteúdo da área de armazenamento temporário ao mesmo tempo |
git reset —hard <commit> | O conteúdo da área de armazenamento temporário e da área de trabalho será modificado para o estado exatamente igual ao do ponto de envio |
git reset --hard HEAD | Retorne a área de trabalho ao estado em que estava quando foi enviada pela última vez |
reverter
git revert usa um novo commit para eliminar quaisquer mudanças feitas por um commit histórico.
A diferença entre reverter e redefinir
-
Git revert usa um novo commit para reverter o commit anterior, e git reset exclui diretamente o commit especificado.
-
Olhando para a operação de reversão, o efeito é semelhante. Mas há uma diferença quando você continua a mesclar a versão antiga no futuro. Como o git revert usa um commit reverso para "neutralizar" o envio anterior, quando o branch antigo for mesclado no futuro, esta parte da mudança não aparecerá novamente, reduzindo os conflitos. No entanto, git reset deleta alguns commits em um certo branch, então quando ele se funde com o branch antigo novamente, estes commits revertidos ainda devem ser introduzidos, causando muitos conflitos. Sobre este ponto, você pode ler este artigo se não entender.
-
Git reset move o HEAD um pouco para trás, enquanto git revert move o HEAD para frente, mas o conteúdo do novo commit é o oposto do conteúdo a ser revertido, o que pode compensar o conteúdo a ser revertido.
empurrar
Faça upload da filial do warehouse local para a filial do warehouse remoto para sincronização.
git push <remote> <branch> | Carregue a filial local designada para o armazém remoto |
---|---|
git push <remote> --force | Empurre forçosamente a filial atual para o armazém remoto, mesmo se houver um conflito |
git push <remote> --all | Empurre todas as filiais para o armazém remoto |
Outros comandos
git status | Mostrar arquivos alterados |
---|---|
git log | Mostra o histórico da versão do ramo atual |
git diff | Mostra a diferença entre a área de preparação e a área de trabalho |
git diff HEAD | Mostra a diferença entre o espaço de trabalho e o último commit do branch atual |
git cherry-pick <commit> | Escolha um commit e mescle no branch atual |
Acima estão alguns comandos comuns e explicações detalhadas sobre o Git. Acredito que posso ter uma compreensão preliminar do Git.