[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
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/
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
没有 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
观察:使用 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
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
Vamos 比较 com 和 versão OpenSSL:
$ echo -e "my precious" | openssl sha1
fa628c8eeaa9527cfb5ac39f43c3760fe4bf8bed
哎呀……完全不同了。请按以下步骤操作 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
Então:
$ echo -e "blob 12\0my precious" | openssl sha1
8b73d29acc6ae79354c2b87ab791aecccf51701f
$ echo "my precious" | git hash-object --stdin
8b73d29acc6ae79354c2b87ab791aecccf51701f
耶! 🎉
🔵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
🔵 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
没有 caso de você estar imaginando,isso mesmo,o Git é um banco de bados chave-valor!
🔵 移动水滴
使用 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:
-
Adicionar o blob a uma área de preparação(暂存区)
-
准备食物的所有事项
-
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
-
--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
Onde o Git armazena o índice?
$ cat .git/index
DIRCsҚjT¸zQp index.txtÆ
7CJVVÙ
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
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-tree、Git agrupa todos os blobs que foram adicionados 和 índice和 cria outro 对象 na 面食.git/objects:
$ git write-tree
3725c9e313e5ae764b2451a8f3b1415bf67cf471
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
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
这是一个有趣的事情,与原始的内容不同。
没有任何对象,请使用 Git 来检索所有爱好者的对象。
100644 blob 8b73d29acc6ae79354c2b87ab791aecccf51701f index.txt
-
100644: o cacheinfo -
blob: o tipo do objeto -
o 哈希做 blob
-
o nom do blob
最后,我们将介绍如何在您的食物中添加额外的信息,以声明作者姓名,并提供有关数据的信息。
🔵 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
Que tipo de objeto é esse?
$ find .git/objects
...
.git/objects/50
.git/objects/50/5555f4f07d90ae14a0f2e67cba7f7b9af539ee
### cat-file
$ git cat-file -t 505555f4f07d90ae14a0f2e67cba7f7b9af539ee
commit
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
-
tree 3725c: a árvore referenciada -
作者/确认人
-
a mensagem do commit meu commit precioso 一个人做承诺 meu commit precioso
🤯 天哪! 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
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
Podemos ver que,dado um commit com um commit pai,podemos percorrer todos os commits recursivamente,atravé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>
...
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
🤯我的天哪!
O Git é um banco de bados de grafos gigante e level,baseado em chave-valor!
🔵 O Grafo do Git
Git 的目录,可以通过 grafos 来操作对象。
-
达多斯/阿奎沃斯即时斑点
-
树与斑点或外树结合
-
提交参考 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
🔵 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
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
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
很熟悉,不知道什么意思? 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
🤔 嗯……
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
Da mesma forma, usando um comando瓷器:
$ git branch
* main
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
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
在集会上,我们了解了 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 add:
-
执行阿基沃
hash-object论证 -
执行阿基沃
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
🕸️ 没有 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 :
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
是否有能力对管道进行响应? Exatamente,符号引用。
接下来,请执行分支修复和执行操作,然后git commit提交 chamado C3:
Ao executar git checkout, podemos alternar a HEAD entre different Branches:
是的,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
瓷器的语言,呈现一个声音或重置。
🔵 git 重置
O comando瓷器 git reset执行内部更新参考,请注意:
$ git reset 356c2
Mas como o Git sabe qual 分支移动者? Bem, o git reset 移动一个分支,相当于 HEAD está apontando。
修订后有何不同?请使用resetGit 移动 ponteiro mas mantém todas,因为与准备工作(索引)不同。
$ git reset b77b
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)
进行修订以更改分支修复 并与索引中的论坛 不同。
Ainda assim,o que devemos fazer se quisermos Resetar E descartar todas as Differences?附加选项--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
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
确认分支修复已提交369cd:
$ git log fix --pretty=oneline -n1
369cd96b1f1ef6fa7de1ff2ed12e15be979dcffa (HEAD -> fix, test) add files
Fizemos um“git重置” SEM移动了一个头!
不,我已经把分支移动到了分支上,然后将特定的分支提交给了实际的分支。
Conheça o cherry-pick .
🔵 git cherry-pick
樱桃挑选um comando瓷器que nos 允许 aplicar um commit arbitrário na 分支实际。
请考虑以下情况:
- 主要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:
存在 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。
合并和快进的基本技巧,如下图所示:
快进不可以
这是一种实际情况,不允许快进。请注意:
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(源):
你可以通过 Git exibe alguns 提交自动请求吗?
Não se engane,esse processo de mesclagem é chamado de mesclagem de três vias,或三路合并!
接下来,我将探索更多的消息传递技术,但不能快进,因为快照和自动提交消息传递,以及与分支源不同的 Git 应用。
Sim, esse é o git rebase .
🔵 git rebase
请看下图:
- 主要 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:
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:
👉 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
Os remotes estão localizados na pasta .git/refs/remotes:
$ find .git/refs
...
.git/refs/remotes/origin
.git/refs/remotes/origin/main
🔵 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.
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.
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:
Em seguida, o
Git mesclará a branch upstream origin/main com a branch local main:
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我们的国家承诺,我们的国家将执行重置或取消我们的控制。
É bastante útil para a versão de lançamentos。作为意大利面本地化的标签.git/refs/tags:
$ find .git/refs
...
.git/refs/tags
.git/refs/tags/v1.0
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}:
快速了解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









































