ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【GIT】git知识总结 [打印本页]

作者: 笑看天下无敌手    时间: 2024-10-28 01:47
标题: 【GIT】git知识总结
概述

为什么选择git?

Git 是一个强大、灵活且高效的版本控制体系,被广泛用于软件开辟和其他领域,是开辟者不可或缺的工具之一
   为什么选择git?
    版本控制工具

   a、集中式版本控制工具
  集中式版本控制工具,版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代码,是必须联网才华工作,局域网或互联网。个人修改后然后提交到中央版本库。
  举例:SVN和CVS
  b、分布式版本控制工具
  分布式版本控制体系没有“中央服务器”,每个人的电脑上都是一个完整的版本库,如许工作的时间,无须要联网了,由于版本库就在你自己的电脑上。多人协作只须要各自的修改推送给对方,就能相互看到对方的修改了。
  举例:Git
  根本设置


  1. git config --global user.name “zhangsan”
  2. git config --global user.email "123456@qq.com"
复制代码

  1. git config --global user.name
  2. git config --global user.email
复制代码

$ git config --local 只对单个仓库有效
$ git config --global 对当前所有仓库有效(常用)
$ git config --system 对体系所有登录用户有效
创建Git仓库

场景一

已有项目纳入git管理
  1. $ cd 项目代码所在文件夹`
  2. $ git init
复制代码
场景二

新建项目用git管理
  1. $ cd 某个文件夹`
  2. $ git init your_project
  3. $ cd your_project
复制代码
基础操作

仓库管理


   利用 git add 将修改的文件添加到暂存区。
  利用 git commit 将暂存区的内容提交到本地库。
  
git commit -am 下令用于提交所有已经被Git管理的文件,同时添加了提交消息。相当于分别执行了git add .和git commit -m "message"两个步调。
   -am 选项只会提交已经被 Git 管理的文件,对于未被 Git 管理的新文件,你须要手动利用 git add 将它们添加到暂存区。
  
作用:查看的修改的状态(暂存区、工作区)
下令情势:git status

作用:添加工作区一个或多个文件的修改到暂存区
下令情势:git add 单个文件名|通配符
将所有修改参加暂存区:git add .

作用:提交暂存区内容到本地仓库的当前分支
下令情势:git commit -m '解释内容'

作用:查看提交记录
下令情势:git log [option]
   –all 显示所有分支
  –pretty=oneline 将提交信息显示为一行
  –abbrev-commit 使得输出的commitId更简短
  –graph 以图的情势显示
  
作用:版本切换
下令情势:git reset --hard commitID
commitID 可以利用 git-log 或 git log 指令查看

git reflog
这将显示一个列表,其中包含了本地仓库近来的操作历史,包括提交、分支切换等。每个操作都有一个对应的 HEAD 指针位置和一个唯一的哈希值。
如果你须要查找丢失的提交或还原已删除的分支,可以利用 git reflog 找到相应的哈希值,然后利用其他 Git 下令举行操作,比如:
  1. # 恢复到指定的哈希值
  2. git reset --hard <commit-hash>
  3. # 创建分支并切换到指定的哈希值
  4. git checkout -b <new-branch> <commit-hash>
复制代码

作用:执行 git commit --amend 将会打开文本编辑器(通常是你设置的默认编辑器),让你修改近来一次的提交信息。你可以修改提交信息并保存退出编辑器,Git 将会更新近来的提交,并利用你修改后的提交信息。
下令情势:git commit --amend

下面是利用交互式 rebase 的一样平常步调:
  1. git rebase -i <commit>
复制代码
这里的<commit>是你希望从哪个提交开始举行rebase的提交的哈希值或者引用。如果你想从当前分支的HEAD开始,可以省略这个参数。
  1. pick abc123 Commit message 1
  2. pick def456 Commit message 2
  3. pick hij789 Commit message 3
复制代码
每一行都以 pick 开头,背面跟着提交的哈希值和提交信息。

   
  
  1. git cherry-pick <commit-hash>...
复制代码
<commit-hash>是要应用的提交的哈希值。
利用git cherry-pick可以很方便地将其他分支上的单个或多个提交应用到当前分支上,而无需将整个分支归并过来。这在须要单独引入特定变更而不影响其他变更时非常有用

利用 git diff
下令可以比力工作区中的修改和暂存区中的内容之间的差别。比方:
  1. git diff
复制代码
这将显示工作区中未暂存的修改。

利用 git diff
--staged下令可以比力暂存区中的修改和最新提交(HEAD)之间的差别。比方:
  1. git diff
  2. --staged
复制代码
这将显示暂存区中即将提交的内容和最新提交之间的差别。

可以联合利用git diff
和 HEAD参数来比力工作区和最新提交(HEAD)之间的差别。比方:
  1. git diff
  2. HEAD
复制代码
分支管理

利用分支意味着你把工作从开辟主线上分脱离来举行庞大的Bug修改、开辟新的功能,以免影响开辟主线。
HEAD指向分支,分支指向版本号

​ 创建本地分支
​ 下令:git branch 分支名

​ 下令:git branch -v

​ 下令:git checkout 分支名

​ 下令:git checkout -b 分支名

​ 一个分支上的提交可以归并到另一个分支
​ 下令:git merge
​ 把指定的分支(分支名称)上的修改归并到当前所在的分支
   Fast-Forward归并:
如果要归并的两个分支之间没有分叉(即一个分支是另一个的直接后继),Git 可以通过简单地移动指针来完成归并,这种情况称为 Fast-Forward 归并。在这种情况下,归并后的提交历史形成一条直线,没有额外的归并提交。这种归并非常快速和简单,不会产生额外的提交。
    平凡归并:
如果要归并的两个分支之间有分叉,Git 就须要创建一个新的归并提交来将两个分支的历史归并在一起。在这种情况下,Git 会自动创建一个新的归并提交,将两个分支的历史整合在一起。归并提交包含了两个分支最后一个共同提交的内容,以及之后的各自的提交。
  
不能删除当前分支,只能删除其他分支
​ git branch -d b1删除分支时,须要做各种查抄
​ git branch -D b1不做任何查抄,强制删除

  1. git branch -f <branchname> <commit>
复制代码
<branchname> 是你想要移动的分支的名称。
<commit> 是你想要将分支移动到的目标提交的引用,可以是提交的哈希值、分支名或相对引用。

   撤销变更指的是将之前的代码更改回滚到之前的状态,使得代码库恢复到之前的版本或状态。
  git reset:用来移动当前分支的指针位置,并且可以选择是否同时修改暂存区和工作目次。
有三种模式可以用于git reset下令:--soft、--mixed 和 --hard。
--soft 模式只会移动分支指针,不会修改暂存区和工作目次,这意味着变更仍然保留在暂存区和工作目次中,你可以重新提交它们。
--mixed 模式会移动分支指针,并且将变更从暂存区撤销到工作目次中,但不会删除工作目次中的变更。
--hard 模式会移动分支指针,并且将暂存区和工作目次中的变更全部删除,慎用,由于它会永久性地抛弃变更。
在reset后,所做的变更还在,但是处于未参加暂存区状态
git revert:
用于创建一个新的提交,该提交的内容是指定提交的相反变更。换句话说,它会撤销某次提交的变更,但是会保留该提交的历史记录。git revert 下令会创建一个新的提交,该提交的内容与指定提交的相反。如许做的利益是可以保留提交历史,克制破坏代码库的完整性。
通过这种方式,其他开辟者可以从长途分支获取到撤销提交,并将其应用到自己的分支中,从而保持代码库的一致性,克制造成杂乱和不须要的冲突。
  1. # 创建一个新分支以防止直接在主分支上进行实验
  2. git checkout -b fix-bug
  3. # 使用 git revert 撤销之前的提交变更
  4. git revert <commit-hash>
  5. # 提交撤销更改
  6. git commit -m "Revert previous commit"
  7. # 将撤销更改推送到远程分支
  8. git push origin fix-bug
复制代码

Git 提供了一种称为标签(Tags)的功能,可以用来永久性地标识某个特定的提交。标签是指向某个特定提交的指针,它们不会随着新的提交而移动,因此非常适合用来标识软件发布的版本、修复紧张的 Bug 或者添加新特性等紧张的提交。
利用标签可以确保你可以在任何时间轻松地回到标记的提交状态,而不必担心它会移动或被覆盖。这对于软件发布非常有用,由于你可以在发布软件的同时创建一个标签,以便随时可以通过标签回到该版本。
可以利用 git tag 下令来创建一个新的标签,并指定要标记的提交。比方:
  1. git tag v1.0 <commit>
复制代码
这将创建一个名为 v1.0 的标签,并将其指向指定的提交。你也可以利用 -a 选项来创建一个带解释的标签,以便记录标签的相关信息。
  1. git tag -a v1.0 -m "Release version 1.0" <commit>
复制代码
创建标签后,你可以利用git show <tag>下令来查看标签的信息,以及标签所指向的提交。

git describe
专门设用来形貌离你近来的锚点的下令(也就是标签)
git describe 的​​语法是:
git describe <ref>
<ref> 可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会利用你现在所在的位置(HEAD)
它输出的效果是
<tag>_<numCommits>_g<hash>
tag表示的是离ref近来的标签,numCommits是表示这个ref与tag相差有多少个提交记录,hash表示的是你所给定的ref所表示的提交记录哈希值的前几位。
当 ref 提交记录上有某个标签时,则只输出标签名称

​ $ git mv readme readme.md
​ 等同于三个步调
  1. $ mv readme readme.md  # 在文件系统中重命名文件
  2. $ git add readme.md   # 将重命名后的文件添加到 Git 暂存区
  3. $ git commit -m "Rename readme to readme.md"
复制代码

​  $ git log --oneline简便
​  $ git log -n4 看所有分支近来四次
​  $ git log --graph 图形化

​ $ gitk
.git目次

目次内容

     
以下是一些查看文件夹内容须要利用的相关指令
显示文件内容:
  1. cat filename
复制代码
显示指定对象的范例:
  1. git cat-file -t <object-id>
复制代码
其中 <object-id> 是对象的哈希值或引用(分支、标签等)。执行这个下令将显示指定对象的范例。
输出对象的范例,可能是 commit、tree(树对象)、blob(文件对象)等。

HEAD

HEAD 指针: HEAD 是一个特殊的指针,它总是指向当前所在的本地分支的最新提交。如果你处于某个分支上,HEAD 就会指向这个分支。
进入.git目次打开head

切换分支后

refs


在Git中,refs目次是用于存储引用(references)的地方。引用是指指向Git对象的指针,常用于表示分支、标签等。refs目次中包含了几个子目次,每个子目次都用于存储特定范例的引用。
以下是refs目次中常见的子目次:
这些目次和文件构成了Git中引用的存储结构,它们资助Git管理分支、标签、长途仓库和stash等紧张信息。
objects

objects 目次中包含以下子目次:
在这些哈希命名的对象目次中,现实上存储了 Git 的四种根本对象范例:blob、tree、commit 和 tag。每个对象都是通过哈希算法计算出来的哈希值来命名和索引的。

文件名(2位字符)加上文件内储存的38位字符组成40个字符的十六进制字符串
利用 git cat-file -t <object-id>
可以得出其范例

利用 git cat-file -p <object-id>打开其内容,发现blob范例文件

tips:Git 中的对象存储机制是基于内容的哈希值来决定对象的唯一性的,它们的 Blob 对象的哈希值也会类似,从而大大节流了存储空间。笔者的file02, file03, file04, file05都为空,文件内容类似,因此哈希值类似,这种机制使得 Git 在存储和比力文件时非常高效。
git根本对象范例

在 Git 中,有四种根本对象范例,它们之间有一定的关系,构成了 Git 的对象模子。这四种对象范例分别是:


   Tree 对象代表目次结构,每个节点可以指向一个 Blob 对象(文件)或另一个 Tree 对象(子目次),以此类推,形成了文件和目次之间的层级关系。
  快照是什么?
   快照(snapshot)通常是指对整个项目状态的一次完整拍摄,包括所有文件和目次的当前状态。与传统的版本控制体系不同,Git 不仅仅记录每个文件的更改差别,而是创建了整个项目在某个时间点的快照。
  分离头指针

“分离头指针”是指将HEAD指向一个特定的提交(commit),而不是指向分支的末端。这通常发生在你切换到一个特定的提交时,而不是切换到一个分支上。这种情况下,HEAD指针就会“分离”,由于它没有指向任何分支,而是直接指向一个提交。这可能会导致一些问题,由于你在分离头指针状态下举行的提交不会更新任何分支,而是直接在当条件交的基础上举行。
如果你不小心进入了分离头指针状态,想要回到一个分支上,可以简单地通过切换到想要的分支来办理:
  1. git checkout <branch_name>
复制代码
或者,如果你想在当前分离头指针状态下创建一个新的分支,可以利用以下下令:
  1. git checkout -b <new_branch_name>
复制代码
如许就会创建一个新的分支,并将其指向当前所在的提交。
分离头指针有时间是有用的,比如你想要查看或测试一个特定的提交,而不想在其基础上创建新的提交。但在大多数情况下,最好照旧在一个具有明确名称的分支上举行工作,以克制肴杂和不须要的麻烦。
GIT团队协作

团队内协作

分支管理

在团队内协作中,分支管理是一个关键的方面。每个团队成员可以在本地创建自己的分支举行开辟,而不影响主分支。一样平常而言,主分支(通常是 main 或 master)应该保持稳固且用于发布生产版本。团队成员可以在各自的分支上举行开辟,然后通过归并哀求(Pull Request)将自己的修改归并到主分支。

团队协作流程

长途仓库操作

1.创建长途仓库

2.初始化

3.仓库创建完成后可以看到仓库地址

常见Git长途仓库操作下令

​ (1)拉取代码
​ (2)初始化本地仓库
​ (3)创建别名(默认"origin")
   ​ 克隆不须要登录账号
  ​ 用户二克隆用户已仓库后,须要被用户一邀请参加仓库,用户二才可以推送(push)更改到github仓库
  跨团队协作

Fork作用

     Fork 是 GitHub 中一种紧张的协作方式,它允许开辟者在保持原始项目的完整性的同时,对项目举行修改和贡献,促进了开源社区的发展和代码共享。
Fork操作流程

Fork 操作的步调如下:

   Fork的重要上风在于允许你贡献到其他项目而不须要直接访问它们的代码库。你可以在你自己的 Fork 下举行任何更改,而这些更改不会影响到原始仓库,直到你主动提出归并哀求并得到原始仓库维护者的答应。开辟者可以或许方便地参与到其他项目的开辟中。
  SSH 密钥

SSH 密钥作用:

     添加 SSH 密钥到 GitHub



  1. $ cat id_rsa.pub
复制代码


补充知识

​ 如果你想取消提交,可以按下 Esc 键,然后输入 :q! 并按下 Enter 键。


如有错误烦请指正。
感谢您的阅读

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4