发布于 2026-01-05 3 阅读
0

[pt-BR] Git 基础知识,um guia completo

[pt-BR] Git 基础知识,um guia completo

阅读《Git日记》,您将了解Git 的基本原理,并在文章中讲述这些内容。

因此,您有机会了解Git 的结构,并可以添加、签出、重置、提交、合并、变基、挑选、拉取、推送内部标签功能。

不是 Git 的主宰者,而是 Git 的基本原理和主宰者

准备好,um guia completo sobre o Git está prestes a começar。


💡 Primeiro 作为重要的事情

Você deve Praticar enquanto lê este post。

伴随,vamos primeiro criar um novo projeto chamadogit-101和 depois inicializar um repositório git com o comando git init



$ mkdir git-101
$ cd git-101


Enter fullscreen mode Exit fullscreen mode

Git 的 CLI 操作技巧如下:

  • 管道工程,包括内部使用的下水管控和中音管控的所有数字管控

  • 瓷器,是Git 上常用的高级命令的一部分

Neste guia,veremos como os comandos 管道与 com os comandos 瓷器que usamos no dia a dia。


⚙️ A arquitetura do Git

与Git 存储库相关的项目,可以验证 Git 组件:



$ ls -F1 .git/

HEAD
config
description
hooks/
info/
objects/
refs/


Enter fullscreen mode Exit fullscreen mode

Vamos nos concentrar nos principais:

  • .git/objects/

  • .git/refs

Vamos analisar cada 组件em detalhes


💾 O Banco de Dados de Objetos

使用 UNIX 进行操作find,使用意大利面进行操作.git/objects



$ find .git/objects

.git/objects
.git/objects/pack
.git/objects/info


Enter fullscreen mode Exit fullscreen mode

没有 Git,请继续坚持下去.git/objects,就像Banco de Dados de Objetos do Git 一样

没有 Git 的情况如何?Qualquer Tipo

🤔等!

Como isso é possível?

使用哈希函数进行操作。

🔵 哈希救援

您可以使用散列映射 来任意操作和固定价值的动态。无论如何,我们必须坚持下去,否则,最终的勇气将永远消失

实现哈希函数的废墟,以方便在社区中使用,以不同的方式映射哈希值,以获取哈希值修复的最终价值。

SHA-1是一种与哈希函数相结合的实现,可在社区中提供安全和保护。

Vamos pegar,例如,o hash da string `

我的宝贝:



$ echo -e "my precious" | openssl sha1
fa628c8eeaa9527cfb5ac39f43c3760fe4bf8bed


Enter fullscreen mode Exit fullscreen mode

观察:使用 Linux 时,请使用 commando sha1sum emvez de OpenSSL

🔵 比较不同的内容

Um bom hashing é uma prática segura onde não podemos conhecer o valor Original , or seja, fazer engenharia reversa.

Caso queiramos saber se o valor mudou , basta envolver o valor na função de hash e voilà , podemos comparar a different:



$ echo -e "my precious" | openssl sha1
fa628c8eeaa9527cfb5ac39f43c3760fe4bf8bed

$ echo -e "no longer my precious" | openssl sha1
2e71c9ae2ef57194955feeaa99f8543ea4cd9f9f


Enter fullscreen mode Exit fullscreen mode

Se os hashes forem different , então podemos assumir que o valor mudou .

你有什么机会吗?SHA-1 的用途什么

这是 Git 内部的扩展 🤯。

🔵 Git 和 SHA-1

O Git usa o SHA-1 para gerar hashes de tudo and armazena no diretório .git/objects简单阿西姆!

O comando管道 hash-objectfaz o trabalho:



$ echo "my precious" | git hash-object --stdin
8b73d29acc6ae79354c2b87ab791aecccf51701f


Enter fullscreen mode Exit fullscreen mode

Vamos 比较 com 和 versão OpenSSL



$ echo -e "my precious" | openssl sha1
fa628c8eeaa9527cfb5ac39f43c3760fe4bf8bed


Enter fullscreen mode Exit fullscreen mode

哎呀……完全不同了。请按以下步骤操作 Git 操作,特别继续分隔。 Essa palavra é o que o Git chama de tipo do object\0

Sim,Git 的对象。 O primeiro que vamos veré o object blob

🔵 O objeto blob

例如,在 comando 中输入一个字符串“我的宝贝” ,然后使用SHA-1 的hash-objectGit 命令进行操作,例如:{tipo_do_objeto} {tamanho_do_conteúdo}\0



blob 12\0myprecious


Enter fullscreen mode Exit fullscreen mode

Então:



$ echo -e "blob 12\0my precious" | openssl sha1
8b73d29acc6ae79354c2b87ab791aecccf51701f

$ echo "my precious" | git hash-object --stdin
8b73d29acc6ae79354c2b87ab791aecccf51701f


Enter fullscreen mode Exit fullscreen mode

耶! 🎉

🔵Armazenando 没有银行 de bados

hash-object不能坚持指挥.git/objects。开发一系列-w持续性的对象:



$ echo "my precious" | git hash-object --stdin -w
8b73d29acc6ae79354c2b87ab791aecccf51701f

$ find .git/objects
...
.git/objects/8b
.git/objects/8b/73d29acc6ae79354c2b87ab791aecccf51701f

### Ou, simplesmente
$ find .git/objects -type f
.git/objects/8b/73d29acc6ae79354c2b87ab791aecccf51701f


Enter fullscreen mode Exit fullscreen mode

o primeiro objeto

🔵 Lendo 或 conteúdo de um blob

但是,由于密码学的原因,我们无法继续讨论哈希的部分内容。

🤔 好的,再等等。

Como o Git descobre o valor 原创

我们可以使用原始的压缩算法来压缩Zlib的值,并使用原始的压缩算法压缩或继续使用武器,而不是银行中的物品,以经济方式实现武器空间。

Ocomandoplumbingfazotrabalho,deformaque, dadaumachave , cat-file eledescomprimeosdadoscompadoseobtémoconteúdooriginal :



$ git cat-file -p 8b73d29acc6ae79354c2b87ab791aecccf51701f
my precious


Enter fullscreen mode Exit fullscreen mode

没有 caso de você estar imaginando,isso mesmo,o Git é um banco de bados chave-valor

NoSQL

🔵 移动水滴

使用 Git 时,请执行以下操作并比较 com outras pessoas

注释、关于各种 arquivos/blob 的 trabalhar 的规定、compartilhá-los 的预期以及最终 trabalho 的名称

Em outras palavras、precisamos agrupar、promover 和 adicionar metadados aos nossos blobs。 Esse processo funciona da seguinte forma:

  1. Adicionar o blob a uma área de preparação(暂存区)

  2. 准备食物的所有事项

  3. Adicionar metadados à estrutura de árvore(作者名称、数据、uma mensagem semântica)

Vamos ver os passos acima em detalhes

🔵 准备区域,或索引

O comando管道 update-index允许 adicionar um blob à área de preparação (stage) e dar um nome a ele:



$ git update-index \
    --add \
    --cacheinfo 100644 \
    8b73d29acc6ae79354c2b87ab791aecccf51701f \
    index.txt


Enter fullscreen mode Exit fullscreen mode
  • --add: adiciona o blob à área de preparação, também chamada de índice

  • --cacheinfo: 注册员使用 arquivo que ainda não está no diretório de trabalho

  • o 哈希做 blob

  • index.txt: 嗯 nome para o blob no índice

o índice do Git

Onde o Git armazena o índice



$ cat .git/index

DIRCsҚjT¸zQp    index.txtÆ
                          7CJVVÙ


Enter fullscreen mode Exit fullscreen mode

No entanto, não é law para humanos, está compado usando Zlib。

Podemos adicionar quantos blobs quisermos ao índice, 例如:



$ git update-index {sha-1} f1.txt
$ git update-index {sha-1} f2.txt


Enter fullscreen mode Exit fullscreen mode

Após adicionar blobs a índice, podemos agrupá-los em uma estrutura de árvore que está pronta para ser promovida.

🔵 O objeto Tree

使用 comando管道 write-treeGit agrupa todos os blobs que foram adicionados 和 índice和 cria outro 对象 na 面食.git/objects



$ git write-tree
3725c9e313e5ae764b2451a8f3b1415bf67cf471


Enter fullscreen mode Exit fullscreen mode

Verificando 意大利面.git/objects,观察 que um novo objeto foi criado:



$ find .git/objects

### O novo objeto
.git/objects/37
.git/objects/37/25c9e313e5ae764b2451a8f3b1415bf67cf471

### O blob criado anteriormente
.git/objects/8b
.git/objects/8b/73d29acc6ae79354c2b87ab791aecccf51701f


Enter fullscreen mode Exit fullscreen mode

Vamos recuperar o valor 原始usando cat-filepara entender melhor:



### Usando a opção -t, obtemos o tipo do objeto
$ git cat-file -t 3725c9e313e5ae764b2451a8f3b1415bf67cf471
tree

$ git cat-file -p 3725c9e313e5ae764b2451a8f3b1415bf67cf471
100644 blob 8b73d29acc6ae79354c2b87ab791aecccf51701f index.txt


Enter fullscreen mode Exit fullscreen mode

这是一个有趣的事情,与原始的内容不同

没有任何对象,请使用 Git 来检索所有爱好者的对象



100644 blob 8b73d29acc6ae79354c2b87ab791aecccf51701f index.txt


Enter fullscreen mode Exit fullscreen mode
  • 100644: o cacheinfo

  • blob: o tipo do objeto

  • o 哈希做 blob

  • o nom do blob

o objeto de árvore

最后,我们将介绍如何在您的食物中添加额外的信息,以声明作者姓名,并提供有关数据的信息。

🔵 O objeto commit

O comando pipeline commit-tree recebe uma árvore, uma mensagem de commit e cria outro object na Pasta .git/objects:



$ git commit-tree 3725c -m 'meu commit precioso'
505555f4f07d90ae14a0f2e67cba7f7b9af539ee


Enter fullscreen mode Exit fullscreen mode

Que tipo de objeto é esse?



$ find .git/objects
...
.git/objects/50
.git/objects/50/5555f4f07d90ae14a0f2e67cba7f7b9af539ee

### cat-file
$ git cat-file -t 505555f4f07d90ae14a0f2e67cba7f7b9af539ee
commit


Enter fullscreen mode Exit fullscreen mode

E qual é o seu valor?



$ git cat-file -p 505555f4f07d90ae14a0f2e67cba7f7b9af539ee

tree 3725c9e313e5ae764b2451a8f3b1415bf67cf471
author leandronsp <leandronsp@example.com> 1678768514 -0300
committer leandronsp <leandronsp@example.com> 1678768514 -0300

meu commit precioso


Enter fullscreen mode Exit fullscreen mode
  • tree 3725c: a árvore referenciada

  • 作者/确认人

  • a mensagem do commit meu commit precioso 一个人做承诺 meu commit precioso

a árvore de commits

🤯 天哪! Estou vendo um padrão aqui?

Além disso, os commits podem fazerreferência a outros commits:



$ git commit-tree 3725c -p 50555 -m 'segundo commit'
5ea578a41333bae71527db537072534a199a0b67


Enter fullscreen mode Exit fullscreen mode

Onde a opção-p允许fazerreferência um commit pai



$ git cat-file -p 5ea578a41333bae71527db537072534a199a0b67

tree 3725c9e313e5ae764b2451a8f3b1415bf67cf471
parent 505555f4f07d90ae14a0f2e67cba7f7b9af539ee
author leandronsp <leandronsp@gmail.com> 1678768968 -0300
committer leandronsp <leandronsp@gmail.com> 1678768968 -0300

segundo commit


Enter fullscreen mode Exit fullscreen mode

Podemos ver que,dado um commit com um commit pai,podemos percorrer todos os commits recursivamenteatravés de todas as suas árvores,até chegarmos aos blobs finais

Uma solução potencial:



$ git cat-file -p <sha1-do-primeiro-commit>
$ git cat-file -p <sha1-da-árvore-do-primeiro-commit>
$ git cat-file -p <sha1-do-commit-pai-do-primeiro-commit>
$ git cat-file -p <sha1-do-commit-pai>
...


Enter fullscreen mode Exit fullscreen mode

E assim pordiante。 Bem, você chegou ao ponto

🔵 记录救援信息

O comando瓷器 git log解决了这些问题,percorrendo todos os commits, seusparents e ávores , nos dando uma perspectiva de uma linha do tempo do nosso trabalho



$ git log 5ea57

commit 5ea578a41333bae71527db537072534a199a0b67
Author: leandronsp <leandronsp@gmail.com>
Date:   Seg Mar 13 22:42:48 2023 -0300

    segundo commit

commit 505555f4f07d90ae14a0f2e67cba7f7b9af539ee
Author: leandronsp <leandronsp@gmail.com>
Date:   Seg Mar 13 22:35:14 2023 -0300

    meu commit precioso


Enter fullscreen mode Exit fullscreen mode

🤯我的天哪!

O Git é um banco de bados de grafos gigante e level,baseado em chave-valor!

🔵 O Grafo do Git

Git 的目录,可以通过 grafos 来操作对象

o grafo do Git

  • 达多斯/阿奎沃斯即时斑点

  • 与斑点或外树结合

  • 提交参考 a arvores e/ou outros commits, adicionando metadados

Isso é muito legal e tudo mais。 Mas usar sha1no comando git logpode ser trabalhoso。

哈希值是什么? É aí que entram as Referências


Git 参考资料

作为意大利面的本地化参考.git/refs



$ find .git/refs

.git/refs/
.git/refs/heads
.git/refs/tags


Enter fullscreen mode Exit fullscreen mode

🔵 Dando nomes aos commits

Podemos associar qualquer hash de commit a um nome arbitrário localizado em .git/refs/heads,例如:



echo 5ea578a41333bae71527db537072534a199a0b67 > .git/refs/heads/test


Enter fullscreen mode Exit fullscreen mode

Agora,vamos usar 或git logusando a nova referência:



$ git log test

commit 5ea578a41333bae71527db537072534a199a0b67
Author: leandronsp <leandronsp@gmail.com>
Date:   Seg Mar 13 22:42:48 2023 -0300

    segundo commit

commit 505555f4f07d90ae14a0f2e67cba7f7b9af539ee
Author: leandronsp <leandronsp@gmail.com>
Date:   Seg Mar 13 22:35:14 2023 -0300

    meu commit precioso


Enter fullscreen mode Exit fullscreen mode

Ainda melhor,o Git fornece o comando plumbing update-ref,para que possamos usá-lo para atualizar a associação de um commit a uma referência:



$ git update-ref refs/heads/test 5ea578a41333bae71527db537072534a199a0b67


Enter fullscreen mode Exit fullscreen mode

很熟悉,不知道什么意思? Sim,estamos falando de分支机构

🔵 分支

分支sãoreferências que apontam para um commit específico。

例如,分支代表comando update-ref,o hash do commit pode ser alterado a qualquer momento,ou seja,umareferência debranchémutável

分支

此刻,我想表达一下我的git log观点:



$ git log

fatal: sua branch atual 'main' não tem nenhum commit ainda


Enter fullscreen mode Exit fullscreen mode

🤔 嗯……

Git sabe que minha 分支实际上是“main”吗?

🔵 头部

参考 HEAD 是本地化的.git/HEAD。 É um único arquivo que aponta para umareferência de cabeça(分支):



$ cat .git/HEAD

ref: refs/heads/main


Enter fullscreen mode Exit fullscreen mode

Da mesma forma, usando um comando瓷器:



$ git branch
* main


Enter fullscreen mode Exit fullscreen mode

Usando o comando管道 symbolic-ref、podemos manipular para qual 分支 a HEAD aponta :



$ git symbolic-ref HEAD refs/heads/test

### Verificar a branch atual
$ git branch
* test


Enter fullscreen mode Exit fullscreen mode

Assim como update-refnas 分支,podemos atualizar a HEAD usando symbolic-refqualquer momento。

符号引用

Na imagem abaixo, vamos mudar nossa HEAD dabranch main para abranch fix :

正在更新头部

sem argumentos, ocomando git logpercorre o commit raiz que éreferenciado pela Branch atual (HEAD):



$ git log

commit 5ea578a41333bae71527db537072534a199a0b67 (HEAD -> test)
Author: leandronsp <leandronsp@gmail.com>
Date:   Ter Mar 14 01:42:48 2023 -0300

    segundo commit

commit 505555f4f07d90ae14a0f2e67cba7f7b9af539ee
Author: leandronsp <leandronsp@gmail.com>
Date:   Ter Mar 14 01:35:14 2023 -0300

    meu commit precioso


Enter fullscreen mode Exit fullscreen mode

在集会上,我们了解了 Git 的原理组件和组件,并与命令人员进行了管道连接,这是一个很好的选择

与我们的同事们一起进行日常活动。


🍽️ 瓷器, os comandos de alto nível

O Git traz mais comandos de alto nível que podemos usar sem 需要操作对象和参考直接。

Esses comandos são chamados de comandos 瓷器

🔵 git add

O comando git addrecebe arquivos no diretório de trabalho como argumentos, salva-os como blobs no banco de bados e os adiciona ao index .

git 添加

摘要git add

  1. 执行阿基沃hash-object论证

  2. 执行阿基沃update-index论证

🔵 git commit

git commitRecebe uma mensagem como argumento,agrupa todos os arquivos previamente adicionados ao index 和 cria um objeto commit

Primeiro, ele executa write-tree:

提交写入树

Em seguida, ele executa commit-tree:

提交 提交树



$ git commit -m 'mais um commit'

[test b77b454] mais um commit
 1 arquivo alterado, 1 exclusão(-)
 exclusão do modo 100644 index.txt


Enter fullscreen mode Exit fullscreen mode

🕸️ 没有 Git 的操作

下一步是使用瓷器,将其作为Git nos bastidores 的参考。

Supondo que acabamos de clonar um projeto onde a HEAD está apontando para abranch main , que aponta para o commit C1 :

git 克隆

Como podemos criar uma nova 分支与HEAD 实际移动器a HEAD para esta nova 分支

🔵 git checkout

使用git checkout此操作-b,Git 将新分支更改为现有分支 (HEAD),并将 HEAD 移动到新分支。



### HEAD
$ git branch
* main

### Cria uma nova branch "fix" usando o mesmo SHA-1 de referência
#### da HEAD atual
$ git checkout -b fix
Switched to a new branch 'fix'

### HEAD
$ git branch
* fix
main


Enter fullscreen mode Exit fullscreen mode

是否有能力管道进行响应? Exatamente,符号引用

git checkout -b fix

接下来,请执行分支修复执行操作,然后git commit提交 chamado C3

git提交

Ao executar git checkout, podemos alternar a HEAD entre different Branches:

git checkout ultimate

是的,podemos querer mover o commit para o qual umabranch aponta

Já sabemos que o comando管道 update-reffaz isso:



$ git update-ref refs/heads/fix 356c2


Enter fullscreen mode Exit fullscreen mode

瓷器的语言,呈现一个声音或重置

🔵 git 重置

O comando瓷器 git reset执行内部更新参考,请注意:



$ git reset 356c2


Enter fullscreen mode Exit fullscreen mode

Mas como o Git sabe qual 分支移动者? Bem, o git reset 移动一个分支,相当于 HEAD está apontando

git 重置

修订后有何不同?请使用resetGit 移动 ponteiro mas mantém todas,因为与准备工作(索引)不同。



$ git reset b77b


Enter fullscreen mode Exit fullscreen mode

Verificando com git status



$ git status

On branch fix
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        another.html
        bye.html
        hello.html

nothing added to commit but untracked files present (use "git add" to track)


Enter fullscreen mode Exit fullscreen mode

进行修订以更改分支修复 并与索引中的论坛 不同

Ainda assim,o que devemos fazer se quisermos Resetar E descartar todas as Differences?附加选项--hard

git reset hard

通常情况下git reset --hard,修订后的内容索引之间存在差异

💡 Dica de ouro sobre mover uma 分行

Caso queiramos 执行者 o管道

update-ref在分支之外,不需要 fazer checkout 分支,不需要git 重置

Podemos usar o comando瓷器 git branch -f source target



$ git branch -f main b77b


Enter fullscreen mode Exit fullscreen mode

Nos bastidores,ele executa um git reset --hardna Branch de origem。 Vamos verificar para qual commit 一个分支 main está apontando:



$ git log main --pretty=oneline -n1
b77b454a9a507f839880879a895ac4f241177a28 (main) another commit


Enter fullscreen mode Exit fullscreen mode

确认分支修复已提交369cd



$ git log fix --pretty=oneline -n1
369cd96b1f1ef6fa7de1ff2ed12e15be979dcffa (HEAD -> fix, test) add files


Enter fullscreen mode Exit fullscreen mode

Fizemos um“git重置” SEM移动了一个头

git branch -f

不,我已经把分支移动到了分支上,然后将特定的分支提交给了实际的分支

Conheça o cherry-pick .

🔵 git cherry-pick

樱桃挑选um comando瓷器que nos 允许 aplicar um commit arbitrário na 分支实际。

请考虑以下情况:

场景 42

  • 主要aponta para C3 - C2 - C1
  • 修复C5 - C4 - C2 - C1 的 aponta
  • HEAD aponta para fix

修复分支,将提交 C3,然后发送参考分支 main

应用执行情况git cherry-pick C3

樱桃挑选

观察队列:

  • o commit C3 será clonado em um novo commit chamado C3'
  • esse novo commit 远参考 ao commit C5
  • 修复 C3 的 moverá o ponteiro'
  • HEAD 连续阿蓬坦多帕拉固定

Depois de aplicar as alterações, o grafo serárepresentado da seguinte forma:

樱桃采摘B

存在 outra maneira de mover o ponteiro de uma 分支。包含应用程序和提交任意分支外的内容,因为不同之处是必要的。

如果错误,那么git merge aqui 就会发生错误。

🔵 git 合并

Vamos 描述以下情况:

外景

  • 主要 aponta para C3 - C2 - C1
  • 修复 C4 - C3 - C2 - C1 的 aponta
  • HEAD aponta para main

如果在实际(主)分支上应用分支修复,则可以实现git合并修复

观察分支修复是否在主分支(C3 - C2 - C1)上提交了所有待办事项,并且在主分支(C4)上提交了相关内容。

Nesse caso,一个分支主要服务“encaminhada”,apontando para o mesmo commit dabranch fix。

合并和快进的基本技巧,如下图所示:

快进

快进不可以

这是一种实际情况,不允许快进。请注意:

场景 44

Nesse caso,一个分支 que será mesclada -分支修复没有示例 - não contém um ou mais commits dabranch atual (main): o commit C3

Portanto,o快进não é possível

不存在任何问题,请通过 Git 实现Snapshotting技术,然后再进行组合。

主要的

iro,o Git 总线或próximo Parente comum entre 作为 duas 分支,嵌套示例,o 提交C2

母本

Em segundo lugar,o Git tira um snapshot do target,然后提交分支 C3:

快照目标

第三步,使用 Git 快照做源代码,然后提交分支 C5:

快照源

为此,Git 自动执行 um commit de mesclagem (C6) 或 aponta para dois pais respectivamente:C3(目标)和 C5(源):

提交 mescragem

你可以通过 Git exibe alguns 提交自动请求

Não se engane,esse processo de mesclagem é chamado de mesclagem de três vias,或三路合并

mesclagem de três vias

接下来,我将探索更多的消息传递技术,但不能快进,因为快照和自动提交消息传递,以及与分支源不同的 Git 应用。

Sim, esse é o git rebase .

🔵 git rebase

请看下图:

场景 55

  • 主要 aponta para C3 - C2 - C1
  • 修复 C5 - C4 - C2 - C1 的 aponta
  • HEAD aponta para fix

Queremos对分支主分支进行变基git rebase main,修复分支,执行。git rebase 的功能是什么

👉 git 重置

Primeiro,或者 Git 执行 um git reset main,在分支上修复 apontará para o mesmo ponteiro dabranch main: C3 - C2 - C1

重置

现在,操作系统提交了 C5 - C4 não têmreferências

👉 git cherry-pick

Em segundo lugar,o Git 执行 um gitcherry-pick C5 na 分支 atual:

rebase:cherry-pick

Observe que, durante o processo de cherry-pick, os commits cherry-pickados são clonados, portanto, o hash final será alterado: C5 - C4 se torna C5' - C4'.

Depois do cherry-pick, podemos ter o seguinte cenário:

rebase-cherry-pick-b

👉 git reset novamente

Por último, o Git realizará um git reset C5', para que o ponteiro da branch fix seja movido de C3 para C5'.

O processo de rebase está concluído.

重新定基:完成

Até agora, trabalhamos com branches locais, ou seja, em nossa máquina. Hora de aprender como trabalhar com branches remotas, que estão sincronizadas com repositórios remotos na internet.


🌐 Branches remotas

Para trabalhar com branches remotas, precisamos adicionar um remote ao nosso repositório local, usando o comando porcelain git remote.



$ git remote add origin git@github.com/myaccount/myrepo.git


Enter fullscreen mode Exit fullscreen mode

Os remotes estão localizados na pasta .git/refs/remotes:



$ find .git/refs
...
.git/refs/remotes/origin
.git/refs/remotes/origin/main


Enter fullscreen mode Exit fullscreen mode

🔵 Buscar do remoto

Como sincronizar a branch remota com nossa branch local?

O Git fornece duas etapas:

👉 git fetch

Usando o comando porcelain git fetch origin main, o Git fará o download da branch remota e a sincronizará com uma nova branch local chamada origin/main, também conhecida como branch upstream.

拿来

👉 git merge

Após buscar e sincronizar a branch upstream, podemos executar um git merge origin/main e, como a upstream está à frente da nossa branch local, o Git aplicará com segurança um merge fast-forward.

获取合并 ff

No entanto, fetch + merge pode ser repetitivo, pois estaríamos sincronizando as branches local/remota várias vezes ao dia.

Mas hoje é nosso dia de sorte, e o Git fornece o comando git pull, que realiza o fetch + merge em nosso nome.

👉 git pull

Com o git pull, o Git executará o fetch (sincronizar o remoto com a branch upstream) e, em seguida, mesclará a branch upstream na branch local.

git pull

Ok, vimos como baixar/transferir alterações do remoto. Por outro lado, como enviar alterações locais para o remoto?

🔵 Enviar para o remoto

O Git fornece um comando porcelain chamado git push:

👉 git push

Ao executar git push origin main, primeiro o Git enviará as alterações para o remoto:

推 A

Em seguida, o

Git mesclará a branch upstream origin/main com a branch local main:

推 B

No final do processo de push, temos a seguinte imagem:

推端

Onde:

  • O remoto foi atualizado (alterações locais enviadas para o remoto)
  • main aponta para C4
  • origin/main aponta para C4
  • HEAD aponta para main

🔵 Dando nomes imutáveis para commits

在集市上,将分支视为提交的简单参考,因为分支的移动者是一个更重要的时刻。

No entanto, o Git também fornece uma maneira de darreferências imutáveis , que não podem ter seus ponteiros alterados (a menos que você as exclua e as crie novamente)。

正如rotular/marcar所提到的那样,它承诺立即生产产品,例如。

Sim,我的标签

👉 git标签

使用陶瓷 git tag我们的国家承诺,我们的国家将执行重置或取消我们的控制。

git标签

É bastante útil para a versão de lançamentos。作为意大利面本地化的标签.git/refs/tags



$ find .git/refs

...
.git/refs/tags
.git/refs/tags/v1.0


Enter fullscreen mode Exit fullscreen mode

Se quisermos alterar o ponteiro da tag, precisamos excluí-la e criar outra com o mesmo nome


💡 Git reflog

现在,最重要的是,我们必须git reflog在本地存储库中更改文件。



$ git reflog

369cd96 (HEAD -> fix, test) HEAD@{0}: reset: moving to main
b77b454 (main) HEAD@{1}: reset: moving to b77b
369cd96 (HEAD -> fix, test) HEAD@{2}: checkout: moving from main to fix
369cd96 (HEAD -> fix, test) HEAD@{3}: checkout: moving from fix to main
369cd96 (HEAD -> fix, test) HEAD@{4}: checkout: moving from main to fix
369cd96 (HEAD -> fix, test) HEAD@{5}: checkout: moving from fix to main
369cd96 (HEAD -> fix, test) HEAD@{6}: checkout: moving from main to fix
369cd96 (HEAD -> fix, test) HEAD@{7}: checkout: moving from test to main
369cd96 (HEAD -> fix, test) HEAD@{8}: checkout: moving from main to test
369cd96 (HEAD -> fix, test) HEAD@{9}: checkout: moving from test to main
369cd96 (HEAD -> fix, test) HEAD@{10}: commit: add files
b77b454 (main) HEAD@{11}: commit: another commit
5ea578a HEAD@{12}:


Enter fullscreen mode Exit fullscreen mode

快速了解Git 的节奏和速度。 Juntamente com重置,挑选类似的东西,并在 Git 上占据主导地位。


结论

Que jornada longa!

这很长一段时间以来,我们主要考虑有关 Git 的重要原则主题。

就这个问题而言,您可以与 Git 的用户分享,解决合并/变基过程中的日志冲突和复杂情况。

Siga-me 没有Twitter和我的博客leandronsp.com,并在 escrevo alguns artigos técnicos 上进行操作。

Até mais!


ChatGPT 提供的Este artigo é uma tradução do meu artigo 原始Git 基础知识,完整指南

文章来源:https://dev.to/leandronsp/pt-br-fundamentos-do-git-um-guia-completo-2djh