git教程(Mac)超详细
目录
一、什么是git
1、什么是集中式与分布式:
2、git的优势:
3、git的安装
二、git如何使用
1、git init创建仓库
2、删除仓库
3、git clone克隆仓库
4、git的工作区域和文件状态
4.1、工作区域:
4.2、文件状态:
5、git reset回退版本
三种回退方式:
(1、git reset --soft:
(2、git reset --hard :
(3、git reset --mixed :
6、git diff查看差异
6.1查看工作区、暂存区、本地仓库之间的差异
6.2查看不同版本之间的差异
7、从版本库中删除文件
三、git 分支
1、什么是git 分支
2、基本语法
2.1、查看分支
2.2、创建分支
2.3、切换分支
2.4、合并分支
2.5、删除分支
3、远程分支
四、如何使用gitHub或者gitee等远程仓库
1、配置SSH公钥
2、连接本地仓库与远程仓库
git push
git pull
一、什么是git
git是一个开源的分布式版本控制系统(VCS),用于敏捷高效地处理任何项目,可以对代码不断进行修改,版本控制系统能记录到每次代码的变化,方便回到之前某个版本。
1、什么是集中式与分布式:
集中式:只有一个中央服务器存储所有版本,只能在中央服务器上下载最新版本,添加或修改一些内容,然后将修改过后的版本上传到中央服务器。
优点:使用简单
缺点:如果中央服务器出现故障或者网络连接出现问题,那么所有人都无法工作。
分布式:每个人的电脑上都有一个完整的版本库,可以在本地进行修改,不需要考虑其他问题,与中央服务器互不影响,当我们需要把自己的修改内容分享给其他人的时候,只需要将仓库同步一下就可以了。
2、git的优势:
分布式:与 集中式版本(SVN)不同,git分布式意味着每个参与项目开发的开发者本地电脑上都有完整的代码仓库副本,包含了项目完整的历史记录、所有分支等信息。
高效的分支管理:多个开发者可以同时开发不同的功能,提高开发效率,可以创建、切换、合并分支。
3、git的安装
git下载官网:Git中文网 官网
这里有好多种下载方式,选择一个来安装git ,下载完毕后可以用 git --version指令来查看git 的版本号,来检验是否安装成功。
二、git如何使用
1、g it init创建仓库
打开终端
step1 :创建一个空白目录,并进入到该目录下:
mkdir demoGit
cd demoGit
step2 :初始化本地仓库:
git init
这个目录就从一个普通的文件夹变成了一个可以被 Git 管理的仓库
step3 :查看该目录下有没有.git目录:
注意:.git目录是一个隐藏目录,需要ls -a来查看
ls
ls -a
如果出现.git 这时就成功将该目录初始化为git仓库。chule
.git目录存放了git仓库所有的数据,可以查看一下:
cd .git
ls -altr
除了使用 git init 创建仓库,我们也可以直接使用 git init < 目录名称 >这个指令创建仓库,与git init 直接创建仓库的区别是,git init 在指定目录下执行该命令。
git init demoGit
2、删除仓库
在git管理的目录下使用指令删除git,删除以后该目录不再被git管理,是一个普通的目录,运行 ls -a 指令也不会看到.git文件了。
m -rf .git
3、git clone克隆仓库
可以从gitHub或者gitee这种远程服务器上来克隆一个已经存在的仓库
git clone + 仓库地址
可以将这个远程仓库的文件直接克隆到本地
4、git的工作区域和文件状态
4.1、工作区域:
(1、工作区 : 本地工作目录,实际操作的目录,包含了项目的所有文件和子目录。可以在其中查看、编辑、和创建文件。用于开发者进行日常开发工作,修改代码、添加新功能等。
(2、暂存区 :临时存储区域,用于保存即将提交到git仓库的修改内容
(3、本地仓库 : 保存了项目的版本历史,是git存储代码和管理信息的主要位置
通过git init 命令创建的那个仓库,包含了完整的项目历史和元数据
git add //将工作区的文件添加到暂存区
git commit //将暂存区的文件添加到本地仓库里
4.2、文件状态:
未跟踪Untrack:新创建的还没有被git管理的文件
未修改Unmodified:已经被git管理,但还没修改
已修改Modified:已经修改,但还没有添加到暂存区的文件
已暂存Staged:已经修改,并添加到暂存区的文件
git status:查看文件状态
git add : 将工作区的文件添加到暂存区
git commit :将暂存区的文件添加到本地仓库
git log / git reflog :查看详细的提交记录
git log --oneline:查看简洁的提交记录
演示:
我们用echo 指令创建一个新的文件后,用git status 查看文件状态,这个新创建的文件
此时这个新创建的文件是一个未跟踪状态,当我们执行 git add 可以将这个文件添加到暂存区,文件状态发生变化,此时该文件是一个Staged状态,可以被提交到本地仓库。
当工作区内有许多个文件,我们可以使用 git add . 来提交所有的文件到暂存区
也可以使用 git add *.txt 这样的通配符指令只提交某种类型的文件
这时我们就可以执行git commit -m "提交信息" 来将暂存区的文件提交到本地仓库
git commit只能提交暂存区的文件到本地仓库
用-m参数来指定提交的信息,会被记录到仓库中
如果不使用-m,那么git commit命令会进入一个交互式的界面,默认会使用vim来编辑提交信息
5、git reset回退版本
每当我们用git commit提交以后,git会存储所有的提交版本
当我们错误的提交后,需要撤销这个操作(回退到某一个版本),这时我们就可以用 git reset 来回退版本,撤销提交
5.1、三种回退方式:
git reset --soft:回退到某一个版本,并且保留工作区和暂存区的所有修改内容
git reset --hard:回退到某一个版本,并且丢弃工作区和暂存区的所有修改内容
git reset --mixed:回退到某一个版本,只保留工作区的修改内容,丢弃暂存区的修改内容
演示:
echo "第二个文件的内容" > file2.txt //创建第二个文件
git add . //添加到暂存区
git commit -m "第二次提交"
echo "第三个文件的内容" > file3.txt。//创建第三个文件
git add .
git commit -m "第三次提交"
git reflog //查看仓库提交历史记录
将demoGit复制三份,进行不同的操作
5.2、git reset --soft:
用git reset --soft 回退到第二次提交:
退回后提交记录里就没有了第三次提交
此时我们查看工作区的内容:
查看暂存区的内容:
可见工作区和暂存区中都还保存着file3.txt这个文件 ,这时候我们就可以重新修改file3文件的内容并将file3重新提交了。
5.3、git reset --hard :
用git reset --hard 回退到第二次提交:
查看工作区和暂存区:
这两个区域都没有的file3文件,也就是file3不存在了
5.4、git reset --mixed :
用git reset --mixed 回退到第二次提交:
并查看工作区和暂存区,发现工作区存在file3,暂存区没有file3了
6、git diff查看差异
当目录中某个文件被修改,我们可以用该指令查看修改前后的差异
6.1查看工作区、暂存区、本地仓库之间的差异
git diff
git diff --cached : 比较工作区和本地仓库之间的差异
6.2查看不同版本之间的差异
git diff HEAD~ HEAD :比较当前 HEAD(当前分支所指向的最新提交)与它的前一个提交之间的差异。
7、从版本库中删除文件
方法一:
rm file 只删除了工作区的文件,没有删除暂存区的内容
可以使用git add . 告诉告诉已经将哪个文件删除,需要更新暂存区
方法二:
使用git rm命令
同时删除了工作区和暂存区的文件
删除完记得提交 ,这样那个文件才能从版本库中删除
如果只删除版本库里的文件,而不删除本地文件,可以加上 --cached
三、git 分支
1、什么是git 分支
分支是 Git 中非常重要的一个概念。它允许你从主代码线(通常是master分支,不过现在也有推荐使用main分支)分离开来,进行独立的开发工作,而不会影响主分支的稳定性。例如,当你要开发一个新功能或者修复一个 bug 时,你可以创建一个新的分支来进行这些工作。
2、基本语法
2.1、查看分支
git branch :该命令用于查看本地仓库中的所有分支。当前所在分支会以星号(*)标记出来。
2.2、创建分支
git branch
2.3、切换分支
git checkout
git checkout -b
2.4、合并分支
git merge
注意:
合并冲突:如果在两个分支对同一部分代码进行了不同的修改,合并时就可能会出现冲突。Git 会在文件中标记出冲突的部分,需要手动解决这些冲突。需要我们编辑文件,决定保留哪些代码,删除这些冲突标记后,再进行提交来完成合并。
2.5、删除分支
git branch -d
注意:
强制删除分支:如果分支还没有合并,使用-d选项会删除失败。如果确实想要删除未合并的分支,可以使用-D选项
3、远程分支
除了本地分支,Git 还支持远程分支。远程分支是存储在远程仓库(如 GitHub、GitLab 等)中的分支。
git branch -r :查看远程仓库中的所有分支
git push
git pull
四、如何使用gitHub或者gitee等远程仓库
以gitee为例 : Gitee - 基于 Git 的代码托管和研发协作平台
注册并登陆账号
在使用 Git 时,我们需要从远程仓库(如 GitHub、GitLab、Gitee 等)拉取(git pull)或推送(git push)代码。如果不使用 SSH 公钥,每次进行这些操作时,都需要输入用户名和密码来进行身份验证。这在频繁操作时会非常繁琐。
在此之前,我们先配置一下ssh公钥
1、配置SSH公钥
cd //回到根目录
cd .ssh. //进入到ssh目录下
ssh-keygen -t rsa -b 4096 // 生成ssh密钥
此时会在ssh目录下生成一个id_rsa的密钥文件
如果是第一次:就回车输入密码
如果不是第一次,输入一个新的文件名(test)后回车
在.ssh目录下 ls -ltr查看文件名
会看到新生成了两个文件,一个test ,一个test.pub
其中test.pub就是公钥文件,复制内容,在gitee中配置公钥
进入gitee设置,找到SSH公钥,把刚才复制的内容粘贴到公钥那一栏中,标题输入任意的名字
这个时候我们的SSH公钥就配置好了
如果我们想要当访问gitee.com的时候,指定使用SSH下的test密钥,我们需要增加一步配置
1. 检查SSH配置文件是否存在
首先,查看是否已经存在SSH配置文件(~/.ssh/config),可以通过以下命令在终端中查看:
ls -al ~/.ssh/config
如果文件不存在,你可以使用文本编辑器(比如nano、vim等)创建该文件,例如使用nano创建的命令如下:
nano config创建config文件并配置路径
nano ~/.ssh/config
2. 在SSH配置文件中添加配置内容
在打开的~/.ssh/config文件(如果是新建则直接开始编辑内容)中,添加如下类似的配置信息,来指定针对Gitee相关域名使用对应的SSH私钥(与你配置到Gitee上公钥对应的私钥):
Host gitee.com HostName gitee.com IdentityFile ~/.ssh/your_private_key_file
这里的your_private_key_file需要替换成你实际的SSH私钥文件名(比如id_rsa等,如果你在生成密钥对的时候没有指定特殊文件名,默认就是id_rsa,对应的公钥就是id_rsa.pub)。
配置完成后,保存并关闭文件(在nano编辑器中按Ctrl + X,然后按Y确认保存,再按回车确认文件名即可退出)。
3. 测试配置是否生效
可以在终端中尝试通过SSH连接Gitee来测试配置是否生效,执行如下命令:
ssh -T git@gitee.com
如果看到类似如下提示信息,就说明配置成功了:
Hi [你的Gitee用户名]! You've successfully authenticated, but Gitee.com does not provide shell access.
通过以上设置后,后续你在操作Gitee项目(比如克隆、推送、拉取等使用Git基于SSH协议的操作)时,就会默认使用你配置好的SSH密钥对进行认证交互了。
问题:如果配置好了SSH。git push的时候扔提示输入用户名和密码:
原因一:远程仓库 URL 使用的是 HTTPS 协议而非 SSH 协议
- **解释**: 即使你在本地配置了 SSH 密钥,如果远程仓库在你克隆或者添加远程仓库时设置的是基于 HTTPS 的 URL(形如 https://gitee.com/your_username/your_repository.git),那么 git 在进行推送等操作时,会按照 HTTPS 方式去验证,自然就会要求输入用户名和密码。而 SSH 协议对应的 URL 应该是形如 git@gitee.com:your_username/your_repository.git 的格式。
- **解决办法**:
origin https://gitee.com/your_username/your_repository.git (fetch) origin https://gitee.com/your_username/your_repository.git (push)
2. 如果看到地址是 `https` 开头的,就需要修改为 `git` 开头的 SSH 协议地址。可以使用以下命令来修改远程仓库地址(假设远程仓库别名是 `origin`,如果不是 `origin` 请替换成实际的别名):
git remote set-url origin git@gitee.com:your_username/your_repository.git
修改完成后,再次执行 git remote -v 确认远程仓库地址已经变成了 SSH 协议对应的正确格式。
2、连接本地仓库与远程仓库
我们在gitee创建一个新的仓库后,会出现以下界面
我们需要配置git ,打开终端,开始配置你的用户名和邮箱
git config --global user.name "petrel"
git config --global user.email "14012394+zhao-hai-yan@user.noreply.gitee.com"
保存用户名和邮箱
git config --global credential.helper store
查看git配置信息,检验是否配置 成功
git config --global --list
git push
将本地仓库上传到远程仓库
在我们已经创建好本地仓库的情况下
git remote add <远程仓库别名> <远程仓库地址>
git push -u <远程仓库别名> <分支名>
git pull
从远程仓库(gitee、gitHub)中将项目文件拉取到本地
git pull <远程仓库别名>