学会 Git 01:Git 入门
Git 的数据库
Git 是一个分布式版本管理系统,可以在任何时间点将文件的状态作为更新记录保存起来。
Git 有以下两种数据库:
- 远程数据库:有专有的服务器,可多人共享
- 本地数据库:用户个人使用,在自己机器上的数据库
平时用自己的机器开发,并将保存在本地数据中,然后可以将自己的开发成果推送到远程数据库,或者从远程数据库获取到自己之前的开发成果或别人开发的内容,保存到本地数据库。
本地数据库向远程数据库推送数据称为 push,从远程数据库获取内容到本地数据库成为 pull
接下来我们来一步步操作,看看如何创建一个数据库,并从本地新建到推送到远程。
Git 入门之本地操作
在使用 Git 前,需要先建立一个仓库,有以下两种情形:
新建数据库 和 复制远程数据库
我们先从新建数据库开始
首先创建一个文件夹 git_test
, 然后打开 git bash
1. 新建一个仓库
会提示
我们会看到文件夹下仍然空空如也,但是我们在查看勾选了隐藏的项目
时,会看到文件夹中多了一个 .git
文件夹,这个文件夹就包含了 git 初始化后所需要的各种东西
- hook:存放了一些 shell 脚本
- info:存放了仓库的一些信息
- logs(新建的项目,还未操作过,所有么有):保存了所有更新的引用记录
- objects:存放了 git 对象
- refs:保存当前最新的一次提交的哈希值
- config:git 仓库的配置文件
- description:仓库的描述信息
- HEAD:用于映射 ref 引用,能够找到下一次提交时的前一个哈希值
现在我们在 git_test
文件夹中新建一个名为 example.txt 的文件,并在文件中写入
2. 查看变更信息
这个命令用于查看我们上次提交之后是否对文件有更改。现在,我们可以使用 git status 命令,然后可以看到如下的信息
由于我们还没有提交过,所以显示 No commits yet
并且 Git 还提醒我们有未跟踪的文件,example.txt 不是目前历史记录的对象,需要将 example.txt 加入到索引中,可以使用 add 命令
3. 将文件添加到暂存区
我们可以使用 add 命令将文件保存到暂存区
: 需要保存到暂存区的文件名
我们可以给 add 指定参数,指定参数「.」,可以把所有的文件加入到暂存区。
现在我们使用 git add .
将 git_test 下的文件都保存到暂存区,然后再次使用 status
看信息描述,example.txt 已经被加入到暂存区了,我们也就可以提交文件了。
我们可以使用 git commit 命令来提交文件
- git commit: 提交暂存区的内容添加到本地仓库中
- -m:本次提交的一些备注信息(推荐每次提交的时候这里都要写)
我们再次使用 status 确定状态,可以看到我们没有新的变更记录了。
最后我们可以使用 git log 查询版本的历史
我们可以看到我们本次 commit 的一个序列号(哈希id):96602409abe0d4ab8f5fdf46e5dc44b69f4de1d6
,说明已经提交成功了
git log 非常强大,它在复杂的 git 中可以查看分支历史,展示提交信息。是我们会常用到的命令之一,之后本系列的文章会更详细的介绍 git log。
Git 入门之远程操作
为了将本地数据库的修改记录共享到远程数据库,必须上传本地数据库中存储的修改记录。这一过程称之为推送(Push)。
有时候,我们在远程看到一个项目,需要把它完整的复制下来,就需要进行克隆(Clone)操作就来复制远程数据库。执行克隆后,远程数据库的全部内容都会被下载。比如说你想下载这个教程,可以使用 git clone
下载,只要 git clone
加上 url 即可。
很多情况下一个项目都是由多人一起维护的,那么我们就需要拉去别人的修改到本地的数据库,进行拉取(Pull) 操作就可以把远程数据库的内容更新到本地数据库。进行拉取,就是从远程的数据库把别人的修改记录下载到本地数据库中。
Push
我们试着将本地数据库推送到远程吧。我们先上 github 创建一个远程仓库,按默认的来就行。然后生成的仓库的 URL 如下:https://github.com/FelixWuu/git_test
在这之前,我们需要将本地数据库与远程数据库关联起来。我们可以使用 git romote
命令来关联远程仓库。remote 命令是这样的:
- name 表示我们给远程仓库起的名字
- url 是远程仓库的 URL
我们尝试连接我们这个项目的地址(没有返回任何东西)
- 我们将远程仓库命名为 origin
- 我推荐远程仓库都叫 origin,因为我们执行 push 或 pull 的时候,如果省略了远程仓库的名字,那么会使用默认的名字
origin
,因此一般情况下,远程仓库都叫做origin
- 我推荐远程仓库都叫 origin,因为我们执行 push 或 pull 的时候,如果省略了远程仓库的名字,那么会使用默认的名字
关联了之后,我们可以用 remote 来查看远程仓库的信息
现在,我们将远程仓库推送上去。我们使用 git pull
命令,将我们的内容推送到远程的 master 分支上。
尝试输入 git branch 吧,它可以看到我们本地的信息
关于 git branch,我们之后会详细聊聊它,现在,你只需要知道它的功能是展示本地的分支。
如果 Push 失败,很有可能是没有配置好 ssh-key,这里简述一下 ssh key 配置的完整步骤
- 检查一下是否存在 ssh-key
切换到 .ssh 文件夹下
然后看看有什么文件
看看是否存在 id_rsa 和 id_rsa.pub文件,如果存在,则说明已经有 ssh-key 了
- 如果没有 ssh-key,则生成一下
之后 git 会询问你一些信息,直接回车,默认同意
- 查看生成的密钥
复制密钥内容
- 到 github 添加 ssh-key
点击 github 用户的头像,点击 setting,选择 SSH and GPG keys,新建一个 SSH key (New SSH key 按钮)
然后给你的密钥取个名字,把之前复制的密钥内容拷贝进去,添加即可。
- 验证是否配置成功
可以看到返回
Clone
你会发现,经过push之后,我们在 https://github.com/FelixWuu/git_test 并没有我们推送上去的内容,这是因为我们推送上去的分支名是 master,而现在,分支名为 main 的才是主分支。
自2020年10月1日后,
Github
会将所有新建的仓库的默认分支从master
修改为main
我们切换分支,即可以看到文件
借此机会,我们熟悉一下 clone。就用 clone 把项目拉下来吧。我们现在要做的事情如下:
- 克隆原仓库
- 创建和推送 main 分支
选择任意一个文件夹,然后打开 git bash,把 git_test clone下来
然后切换到 git_test 项目下
这时候,我们再使用 git branch 看看分支信息
可以看到我们现在所处的分支是 main 分支,里面空空如也(如果你在建立项目时选择了生成一个 README,那么 main 分支会带有一个 README.md 文件,该文件一般用来写项目的说明)
我们再把原来项目中的example.txt拷贝到现在clone下来的文件夹中,然后 git status 看看结果
我们依然走一遍 add - commit - push 的流程 (记得 push 到 main 分支)
现在,我们可以在 main 分支下看到我们的 example.txt 了
当然,我们也可以自己设置主分支
Pull
现在我们试试 pull 命令。它的格式是:git pull <repository> <refspec>...
我们试着拉去 master 分支。因为我们在新的文件夹中操作,它并不知道 master 分支是什么,现在先按照如下命令执行
它的意思是切换到本地分支 master 并关联远程的 master 分支
现在查看本地分支中可以看到两条分支了,并且master分支前面有一个 *
号,且master分支被高亮,这说明我们当前处于 master 分支
执行一次 git pull 看看
现在,我们切换到老的 git_test 项目中,修改一下 example.txt 并推送上去,然后新增一个文件 example2.txt.
我们给 example.txt 新增一句话
example.txt
并新建一个 example2.txt,随便填写点内容
example2.txt
然后在老的文件夹中开启一个新的 git bash,将改动推送到远端(使用 git status
可以看到我们对文件的改动)
推送流程,这里我们 git push
不指定分支,Git 知道我们当前分支关联的远程分支是 origin/master, 并默认将其推送到对应的远程分支上。
现在回到我们新克隆的文件夹中,可以看到文件还是只有 example.txt的。现在打开 git bash,试着再 git pull
一次。
我们成功的拉去到了项目文件,并且改动和新增的文件都出现再我们文件夹中了。核对一下,内容一致。
- 这里 pull 也没有指定分支名,因为我们之前切换到了master分支了,这条分支也关联了远程的master分支,因此pull时 Git 知道选择哪条分支。如下,括号中的就是当前分支的分支名。
__EOF__

本文链接:https://www.cnblogs.com/namelessguest/p/16749794.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!