git 快速使用

主要包括本地仓库和远程仓库的管理。

本文部分参考: https://www.bilibili.com/video/BV1MU4y1Y7h5

1. git安装及配置

注意,以下所有配置,均可在用户目录下的.ssh文件夹和.gitconfig文件中找到,有时候也可以直接创建这些

文件并写入配置,但是代码比较繁琐,下面还是使用git提供的命令进行配置

1.1 下载及安装

Git - Downloading Package (git-scm.com)

1.2 本地身份配置

本地账户名和邮箱名可随便填写,假的也行,这个主要为了后面提交到远程仓库时,
管理远程仓库的人可以看见到底是哪个人推了这段代码上来,辨识身份用的,和在线github账号完全无关

1
2
git config --global user.name "Your Name"
git config --global user.email "youremail@yourdomain.com"

然后是本地生成一串ssh key,相当于暗号,生成后复制到你的远程仓库,这里指的是github中去,以后这台电脑

在git环境下推送东西到有这串钥匙的github账号的仓库中时,就不需要输入任何账号密码,直接就能推送过去.

生成办法也很简单,随便一个地方右击,git gui here,然后找到help-show ssh key,如果出来的窗口没有一串英文字母和数字的ssh key,窗口中右上方有个generate ssh key,就能生成,然后复制这串key,点击网页右上方你的github头像,点Settings,SSH and GPG keys,然后粘贴进去,添加即可,ssh key的名称随意填写.

1.3 代理设置

配置代理是因为有时候github无法访问,配置系统代理,与设置—网络—代理中的系统代理一致,需要

你用软件打开系统代理,在系统设置的网络的代理中才能看到

代理配置:git设置、查看、取消代理_git 取消代理-CSDN博客

如果上传的时候出现下方错误,说明你的22号端口被学校或者机构禁用了,需要换端口

1
2
ssh: connect to host github.com port 22: Connection timed out
fatal: Could not read from remote repository.

端口配置:坑:ssh: connect to host github.com port 22: Connection refused - 知乎 (zhihu.com)

2. git基本命令格式

一般形式:

1
git <命令> [一般参数,长参数,短参数,多个参数]

一般参数的命令:

1
2
git log readme.md
只显示readme.md文件的提交记录

长参数的命令:

1
2
3
git log --author John
git log --author=John
显示作者John的提交记录

短参数的命令:

1
2
git log -a John
显示作者John的提交记录

多个参数的命令:

1
2
git log --author=John --since="2023-01-01" -- README.md
只显示作者为 "John" 且从 "2023-01-01" 开始的与文件 "README.md" 相关的提交记录

实际上命令可以理解为函数名,然后后面就是函数的参数,然后参数包括普通参数和关键字参数,

普通参数直接 git 命令 普通参数, 关键字参数就是 git 命令 [关键字=参数] 关键字就是长选项或者短选项,

后面的内容就是参数值,一般用空格放在中间,也可以使用等号.

3. 本地仓库管理

3.1 基本概念

首先本地仓库抽象为3块内存,分别是仓库,暂存区,工作区,工作区就是你能看得到的本地文件夹目录下的区域,

仓库就是背后你看不到的一个区域,你需要把你想管理的文件都提交到这个仓库才行,暂存区就是一个中转站,所有

工作目录的东西需要先放到暂存区后,才能提交给仓库.如下图

git01

为了便于理解,这里举个例子,比如你在玩口袋妖怪,你的工作区就是你看到的游戏界面,现在你要购买10个伤药和5个解毒药,于是你通过按键操控人物来到商店,点击购买10个伤药和5个解毒药,于是你的工作区也就是游戏界面的装备栏的物品就更新了,这个操作对应git里面的两步操作,一个就是把工作区的文件添加10个伤药和5个解毒药,然后通过git add放入缓存区,在游戏里面你购买就相当于同时执行了这两步.如果此时你直接关机,那么下次开机你的记录还是没有10个伤药和5个解毒药,所以还需要进行存档操作,这步对应git里面的git commit.下面就来完整操作一遍.

第一步,初始化一个存档

假设pokemon文件夹就是我的工作目录,我添加一个initial_archive文件,然后使用如下

命令将仓库初始化成这个存档(第一个命令就是初始化仓库,背后新建了一个数据结构进行管理),

剩下两个命令你暂时不用理会,现在当作不存在,后面你就明白了.

1
2
3
git init 
git add .
git commit -m 'init archive'

git02

第二步,购买伤药解毒药

git03

第三步,提交给缓存区

使用如下命令,其中点是提交所有修改的内容

1
git add .

git04

第四步,存档

使用如下命令,其中 -m表示message消息,后面字符串是你对当前操作的一个说明,后面可以通过log查看这个消息,

以便于你知道你干了什么事情

1
git commit -m 'buy 10 shangyao and 10 jieduyao'

git05

第五步,就是简单查看一下你干了什么事

1
2
git log
或者使用 git-log 这个自定义配置的命令,这个前面没有提,请看参考链接中的视频教程解说

git06

3.2 多分支管理

这个这里也是简单提一下到底是怎么回事,相当于你同学借你的当前存档继续玩,比如他发现了一个大师球,

然后你在你的存档下继续玩,你捉到了一只妙蛙种子,然后你和你的同学都进行了存档.

当前的情况就是两台游戏机,对应的就是git仓库的两个分支,每个分支对应一个游戏机,你所在的主分支就是

上一节操作的那台游戏机和存档,而你同学的分支是另外开辟的结构和你的一模一样的分支.

先把两个分支分别怎么玩讲清楚,然后再讲别的.接下来我们主要做三件事,第一件事就是把你的存档拷贝给一台新游戏机,也就是新开辟一个一模一样的分支,第二件事就是你去捕捉妙蛙种子并存档,第三件事就是让你同学找到大师球并存档.先把这3件事情完成再谈后面的事情.

三件事全流程

第一件事,拷存档,即开辟新分支

1
git branch '分支名称'

git07

第二件事,你在master分支捕捉妙蛙种子并存档

既然当前分支是master,那么当前显示的工作目录就是你自己的游戏机,直接操作即可

git08

第三件事,切换到小智分支,然后寻找大师球,并存档

1
git checkout xiaozhi  # 切换到小智分支

git09

寻找大师球,并存档到小智游戏机的存档里面,

由于当前分支已经切换到小智游戏机了,所以当前工作目录就是小智的游戏机

git10

三件事之后

做完上面3件事情之后,我们有了两个游戏机和存档,一般来说,这两个存档你只能选择其中一个继续玩,比如要了妙蛙种子存档你就没有大师球,要了大师球存档,你就不能有妙蛙种子.

但是和游戏存档不同的是,我们这里可以合并存档,把修改的地方(这里是增加装备或精灵)同时合并到同一个存档,这里就把小智游戏机的存档合并到你的游戏机中去.这样小智获得的大师球你就也有了.

(冲突情况请参考上面的参考链接,就是我使用了一个伤药,剩余9个,小智购买了10个伤药,变成了20个,我们同时更改了伤药,那么合并分支到底采用哪个人的伤药呢?不要突然想到数量合并,这样你就想偏了)

这里仅仅为了演示基本操作,并让你理解这个操作背后的含义,所以只把简单的例子执行一遍让你看,并不会面面俱到

1
2
git checkout master # 切换到你的游戏机
git merge xiaozhi # 把小智的存档合并到你的存档

git11

git12

注意,上面git merge xiaozhi 后面其实也要加个字符串短消息,和git commit一样.如果上面不加,会跳出一个添加短消息的界面,自动给你加了一个消息,你不需要更改,直接按ESC,然后输入:wq退出即可.

4. 远程仓库管理

首先新建一个github远程仓库,非常简单,登录你的账号后,上面有新建仓库选项,一路创建下去即可,先不用管各种配置选项,然后打开你创建的仓库就行了.

4.1 推送

远程仓库相当于云存档,然后你电脑上的多个分支,最后一般是都合并到你的主分支上面(master或main),你上传到云存档的就是这个主分支,将主分支存档合并到云存档里面.具体操作步骤如下:

第一步,设置添加远程仓库

1
2
3
4
 git remote add <远端名称> <仓库路径>
远端名称,随便起个名字就行,比如remote-pokemon
仓库路径,从远端服务器获取此URL,就是你打开那个远程仓库,点击右边的code,会出现https,ssh,github cli三个
链接地址,这里选ssh的地址,并复制下来

第二步,合并存档到云存档

1
git push remote-pokemon master:main

remote-pokemon是你刚开始定义的远程仓库名称

master是本地分支名称

main是远程仓库主分支名称

4.2 克隆与拉取

克隆就是张三买了游戏机,他也想玩口袋妖怪,但他又不想从头打,于是他把云端存档下载到他的游戏机,然后打

1
git clone  <仓库URL>  pokemon2

仓库URL就是上面说的仓库路径,也就是ssh地址,pokemon2就是工作目录,把远程仓库的东西都克隆到这个工作目录

拉取就是云端存档被张三玩了一下,他捉到了喷火龙,这是你没有的,于是你新开一个本地存档分支’zhangsan’,把他的存档拉取下来到这个分支,然后继续打这个分支,打完后,再合并到你的本地主分支上面.

1
2
git fetch <远程仓库名> <远程分支名>:<本地分支名>
git fetch remote-pokemon main:zhangsan

注意,这里拉取的同时,也会新创建zhangsan分支,这个分支你游戏机里之前是没有的,

假如你的游戏机已经有了zhangsan分支了,使用fetch命令拉下来的存档会存到一个引用中,你需要再使用merge命令合并到你的zhangsan存档中去,这种已经存在这个分支的情况,我们通常并不这么麻烦,而是使用另外的拉取命令

1
2
git pull <远程仓库名> <远程分支名>:<本地分支名>
git pull remote-pokemon main:zhangsan

这样,就直接拉取并合并到你的zhangsan分支存档里面了,相当于fetch+merge命令

ok,基本命令和所做的事情的含义就讲到这里,到这里你的脑中应该就有一个大致的印象了,知道这东西大概是怎么回事了,更多的命令和使用,以及各种场景(冲突,分支开发),请参考其他资料,或问chatgpt即可.

5. 图形化管理工具

这节就是告诉你有图形化管理工具替代git命令,图形化工具有很多种,会使用命令的情况下,这些工具学起来也不会很难,所以这里不会详细讲解这些工具怎么用.本文的核心是让你大脑里对git管理的东西到底是怎么回事有个大致的概念,这个很重要.下面简单看一款图形化工具,叫Sourcetree

git13

上面点击history就能看到所有分支的记录,相当于git log

git14

另外,你在本地修改了任意内容,这里也是实时更新的,再workspace中的文件状态中可以提交修改到暂存区,然后commit给存档。

这里就不把每个事情讲一遍了,详细使用请参考网上教程,直接b站搜Sourcetree或者git图形化即可。