文章目录
- 简介:
- 使用教程:
- (1)安装git:
- (2)设置用户名和邮箱作为标识符:
- (3)建立本地仓库:
- 本地仓库作用:
- (1)将文件添加至暂存区:
- (2)将更改的数据永久添加到本地仓库:
- (3)查看提交日志:
- (4)回退到曾经提交的某一个版本:
- (4)分支:
- 分支的操作:
- (1)创建分支:
- (2)查看分支:
- (3)更改分支名称:
- (4)删除分支:
- 关于分支
- 关于冲突:
- (5)远程仓库:
- 远程仓库的使用:
- (1)给你的本地仓库添加一个远程仓库:
- (2)将本地仓库分支的版本传输到远程仓库的一个分支:
- (3)将远程仓库分支的版本合并到本地仓库的某一个分支的版本:
- (4)将远程仓库的版本克隆到本地仓库(包括每个分支还有分支中的版本):
简介:
git——集中式与分布式版本控制: 与集中式版本控制(如SVN)不同,Git采用分布式版本控制,每个人的电脑上都是一个完整的版本仓库,无需依赖中央服务器,即可在本地进行版本控制和代码管理。
简单来说,你可以创建一个目录文件作为一个仓库,你在这个目录文件中编写的代码可以添加到这个仓库,而每一次添加,这个仓库都会将这次添加的文件和文件中的内容保存放到A处,而你接下来重新修改项目代码时再次进行提交时这个仓库也会保存本次提交的内容放到B处,作为你这个项目的A和B两个版本,由于B是被更改后的A版本,如果这时你想重新回去看A版本的代码,可以通过这个仓库的日志找到A版本存放的地方,然后重新拿出A版本提交时的文件与里面的文件内容。
同时,如果将本地仓库的内容与远程仓库合并,例如一个扫地机器人,由团队协作需要开发下列功能:
扫地
移动
定时
那么,就可以交由三个人来分别开发某一个功能,例如1号开发扫地,那么它将项目写好先保存在本地仓库,然后上传远程仓库,别的队友也能够从远程仓库中获取到他的扫地的代码,如果扫地功能需要与定时功能有联合,那么负责定时功能开发的2号人员就能够根据已经上传到远程仓库的扫地功能代码编写定时扫地的内容,一般开发人员会互相留有接口,那么只需要三人将代码开发好最后上传合并成一个完整的工程代码即可。同时无论是远程仓库还是本地仓库,都保留着每一次提交的文件与文件内容,如果再更改某个文件时发现错误了也能够很好的回退到原来的版本重新开发。
使用教程:
git_14">(1)安装git:
下载命令:
sudo apt-get update
sudo apt-get install git
查看版本命令(可以先使用看看是不是已经安装过了):
git --version
(2)设置用户名和邮箱作为标识符:
这个用户名和邮箱跟你的远程仓库没有关系,只是作为提交到远程仓库时的一个提交者标识:
命令:
git config --global user.nam "用户名"
git config --global user.email "邮箱"
命令解释:
1.git config: 这是Git的一个命令,用于读取和写入配置变量,这些变量可以控制Git的各种方面。配置可以在三个不同的级别上进行:系统级(对所有用户生效)、全局级(对当前用户生效)和仓库级(只对当前仓库生效)。
2.–global : 这个选项指定了配置的作用范围。使用–global时,配置将应用于当前用户的所有仓库,即存储在用户主目录下的.gitconfig文件中。如果不使用–global选项,则配置将仅应用于当前仓库,即存储在仓库目录下的.git/config文件中。
(3)建立本地仓库:
命令:
该命令执行后相当于将当前目录作为本地仓库, 会在当前目录下生成一个.git的隐藏目录文件,这个文件包含了 Git 用来追踪和管理版本控制的所有信息,比如提交(commits)、分支(branches)、标签(tags)、钩子(hooks)等。还有本地仓库的配置信息config(远程仓库的URL与本地仓库的信息)
git init
也可以在当前目录文件下重新创建一个新的目录文件然后将该目录文件作为本地仓库,.git隐藏文件也会被创建在该目录下。可以使用 ls -a查看隐藏文件
git init 要创建的目录文件名例如:git init opencv
本地仓库作用:
先需要在当前.git所在的目录下创建一个.txt或者其他类型的文件
(1)将文件添加至暂存区:
命令:
当你执行 git add 命令后,Git 会检查指定文件的更改,并将这些更改的数据(而不是文件内容本身)添加到暂存区中。这意味着,如果你对文件进行了多次更改,Git 会记录这些更改的累积效果。
git add 要添加的文件名.后缀
(2)将更改的数据永久添加到本地仓库:
你可以使用 git commit 命令来创建一个新的提交,将暂存区中的更改永久保存到 Git 的历史记录中。提交时,你可以附加一条提交信息来描述这些更改的目的或内容。执行之后当前的文件会作为一个版本保存在本地库中。
git commit -m "描述更改的内容"
//规范格式:
git commit -m "fix(test):change content"
如果不加-m和后面的描述信息会进入vim编辑器编辑
(3)查看提交日志:
命令:
执行之后终端会显示提交的历史纪录,完成上面git add和git commit就算一次提交,git能够保存每一次提交的版本,如此你能够回到你曾经提交的任一版本
git log
提交日志中会显示
提交的作者 邮箱
提交的日期
提交描述
commit后面的内容就是commit ID可用于之后的回退操作
(4)回退到曾经提交的某一个版本:
回退到某一个版本意味着:
1.工作目录: 会被更新为该版本提交时的文件内容。
2.暂存区: 会被清空或更新为该版本提交时的状态(取决于你使用的命令)。
3.提交历史: 可能会发生变化(如果你使用的是会修改历史的命令,如git reset --hard),也可能会保持不变并创建一个新的提交来撤销之前的更改(如果你使用的是git revert)。
命令: 有好几个不过我推荐使用git revert
git revert commitID
假设我们有一个简单的Git仓库,其中包含三个提交:
想尝试的按照下面这个例子尝试,下面指的添加,就是在你当前仓库目录中添加一个文件(执行了git add 与 git commit)
- 第一个提交(commit 1):添加了一个名为file1.txt的文件,内容为“Hello, World!”。
- 第二个提交(commit 2):修改了file1.txt文件,将内容更改为“Hello, Git!”。
- 第三个提交(commit 3):添加了一个名为file2.txt的文件,内容为“Another file.”。
当前的HEAD指向commit 3,即最新的提交。
现在,我们决定撤销commit 2所做的更改,即恢复file1.txt文件到commit 1时的状态,但保留commit 3的更改。
git revert <commit-2-hash>
/*
<commit-2-hash>就是git log 之后
你要回退的那个版本那一串cimmit后面的字符
*/
发生的变化:
1.新提交的创建: Git会创建一个新的提交(假设为commit 4),这个提交的内容是撤销commit 2的更改。换句话说,commit 4会将file1.txt文件恢复到commit 1时的状态,即内容为“Hello, World!”。
2.提交历史的更新: 提交历史将更新为:commit 1 -> commit 2 -> commit 3 -> commit 4。其中,commit 4是撤销commit 2的新提交。注意,虽然commit 2仍然存在于提交历史中,但它的更改已经被commit 4所撤销。
3.工作目录和暂存区的更新: 工作目录和暂存区将反映commit 4的状态,即file1.txt文件的内容将被恢复到“Hello, World!”,而file2.txt文件仍然保留。
如果使用的是git reset命令那么以上述例子来说,发生的变化就是,file1的内容仍然是Hello GIT,但是file2会被撤销,没有被
创建。
(4)分支:
我的理解是,分支就是两个文件夹:
1.开发一个项目如扫地机器人,我先在dev分支上,也就是工程文件dev中进行编写,当能够实现完整的自动打扫的功能之后我就将dev中的文件或代码复制一份到主分支main,然后让他作为完整的扫地机器人项目代码存在,
2.再之后如果我想添加定时功能,我就在dev工程文件夹下面写一个定时功能,实现之后再将dev工程复制一遍将原来的main文件夹中的文件覆盖实现能扫地,也能定时的功能。而你在dev分支上干的事(提交了哪些文件,做了哪些修改)也会被复制到主分支中。
3.创建仓库时没有特别的指定时,会默认创建一个主分支名为master或者main,要让该分支成为一个有效分支之后才能进行新的分支创建,也就是在该分支下进行一次git add与git commit
创建仓库时没有特别的指定时,会默认创建一个主分支名为master或者main,要让该分支成为一个有效分支之后才能进行新的分支创建,也就是在该分支下进行一次git add与git commit,再之后创建的所有分支都会包含第一次提交的内容,但是再这之后,任何一个分支所作的修改在其他分支是看不到的,包括你在A分支创建的文件和做的文件修改在B分支下是不存在的,只有你将A分支合并到B分支中,这时A中的修改就会被合并到B分支中,例如如果两者有相同的文件1,那么文件1的内容会被合并,如果A中有文件2B中没有,那么合并后B中也会有文件B
注意:
如果你先创建了分支A并做了两次提交:
那么分支A的提交日志中就是:
第一次提交 ——修改文件1
第二次提交——添加一个文件2
这时你去创建一个分支B,然后在A分支中添加一个文件3,则:
分支A的日志:
第一次提交 ——修改文件1
第二次提交——添加一个文件2
第三次提交——添加一个文件3
分支B的日志:
第一次提交 ——修改文件1
第二次提交——添加一个文件2
并且文件3在分支B下是不存在的
分支的操作:
(1)创建分支:
命令:
git init -b 分支名 #创建一个仓库同时创建一个<分支名>的分支
git branch 分支名 #已经有仓库创建分支
(2)查看分支:
命令:
git branch
只有你当前的版本库有东西,才会显示出已有的东西,如果你还没进行任何git add与git commit操作输入查看分支的指令会是啥也没有。
(3)更改分支名称:
命令:
git branch -m <旧分支名称><新分支名称>
(4)删除分支:
命令:
git branch -d 分支名 #删除未已经合并的分支
git branch -D 分支名 #删除未合并的分支,强制删除
(5)切换分支:
命令:
git chekout 分支名
(6)合并分支:
命令:
git merge 要合并的分支名
例如:
当前分支main
git merge dev
如此就会将dev分支的版本与main分支的版本合并
合并时注意:
1.如果分支A中和分支B都有文件1
分支A文件1内容:
111111
22222
分支B文件1内容:
22222
111111
这时如果两个分支合并,会产生冲突,因为它们文件1中的内容都在同一行但内容不同。
2.分支A和分支B中都有文件1,想要合并必须文件1中的内容所在地方不冲突,例如:
分支A文件1:
“12345”
“45678”
分支B文件1:
“12345”
那么如果在分支B中合并分支A,则分支B的文件1内容变成:
“12345”
“45678”
关于分支
1. 我自己尝试了一下,就是第一次创建一个本地仓库,就需要创建一个分支,如果不指定分支,会默认创建一个main或者master的分支,如果没有有效分支是不能进行第二个分支的创建的,而要使一个分支有效就必须进行一次git add与git commit操作,也就是提交第一个版本,
2. 然后之后创建的分支都会有第一个版本的提交记录,也包含该版本的文件与文件内容,但是之后各个分支的提交都是独立的,在没有合并之前,分支A中的提交在分支B中是看不到的,
3. 例如分支A在初始版本文件中添加了一个文件,分支B中是没有这个文件的,相当于两个不同的文件夹,只有刚开始的初始文件是相同的。如下图:
关于冲突:
当你尝试合并两个分支,而这两个分支在同一文件的同一部分都做了修改,Git无法自动决定应该使用哪个版本的修改时,就会产生合并冲突。Git会在冲突的文件中插入特殊的标记来帮助你识别和解决这些冲突。
"Hello world"
<<<<<<< HEAD
"Hello git"
=======
>>>>>>> dev2
(1)“Hello world”: 这是合并之前文件中可能已经存在的内容,或者是在一个分支中被修改后的内容。
(2)<<<<<<< HEAD: 这表示当前HEAD指向的分支(通常是你执行合并操作时所在的分支)中的内容。在这个例子中,HEAD分支中的内容没有显示(因为冲突发生在下一行),但标记指出了冲突的起点。
(3)“Hello git”: 这是另一个分支(在这个例子中是dev2分支)中的修改。Git将dev2分支的内容放在=======之前。
(4)=======: 这是一个分隔符,用于分隔两个分支中冲突的修改。
(4)>>>>>>> dev2: 这表示dev2分支中的修改结束,以及这个冲突标记的终点。
(5)远程仓库:
根据上面的分支介绍,我们如果是团队开发肯定时要在各自的电脑上,而本地仓库想要同步就需要用到远程仓库。
我用的是国内的gitee,也可以用github,最终只要仓库的URL就行
远程仓库其实就是需要一个服务器,然后大家能够通过这个服务器传输文件,而Github与Gitee就是两个能够使用git命令的云盘,相当于大家可以再此建立一个仓库,这个仓库能够被别人访问到。
1.首先按照GitHub或者Gitee的教程创建一个自己的仓库https://gitee.com/help/articles/4120
2.创建的时候会有一个仓库的网址的,如果创建的时候没有看可以进入仓库界面,点击下图所示的克隆/下载
3.点击后下图所示就是你远程仓库的URL(Uniform Resource Locator,统一资源定位符)是一个用于标识互联网上资源位置的字符串。它提供了一种标准化的方式,让用户和程序能够找到并访问互联网上的各种资源,如网页、图片、视频、文件等。
远程仓库的使用:
(1)给你的本地仓库添加一个远程仓库:
这样当你将本地仓库的版本内容提交到远程仓库时,就根据这个地址来,后续可以通过命令修改,也可以通过.git隐藏目录文件下的config文件修改,包括远程仓库的名字
命令:
git remote 远程仓库的URL
git remote https://gitee.com/THECOW_W/opencv.git
(2)将本地仓库分支的版本传输到远程仓库的一个分支:
命令:
git push -u origin main
origin是默认远程仓库名,可以在config文件中修改,不修改也是可以的,main是你要传输的那个仓库的分支的名
(3)将远程仓库分支的版本合并到本地仓库的某一个分支的版本:
(4)将远程仓库的版本克隆到本地仓库(包括每个分支还有分支中的版本):
命令:
git clone 仓库的URL
git clone https://gitee.com/THECOW_W/opencv.git