Git操作指南:下载、配置、连接远程仓库与代码推送
Git下载与配置
Git安装
windows
https://git-scm.com/downloads
Git管理
Git原理图与简介
workspace
——工作区
Index
——缓存区
Repository
——本地仓库
Remope
——远程仓库
Git是一个什么工具,为什么使用Git?开始时候的我,一开始以为是Git就是Github等平台用来分享源码的工具。现在发现这个认识是完全不正确的。Git一言以蔽之就是一个版本管理工具,它可以记录你每一次保存文件对文件的修改,以便于你随时吃后悔药回退到某个版本中。这个功能对于开发而言是非常重要的。
实现这样的功能,Git使用了3个存储空间,分别是workspace
工作区、Index
缓存区(或索引区)、Repository
本地仓库。workspace
是你进行文件编辑的工作空间,就好比你上班时工作的桌面,你可以在你的工作桌面上书写或者修改一份一份的文件;Index
是你的暂时存放文件的一摞文件堆,你可以把workspace
写好或修改好的一份或者多份文件放到这个文件堆中,这个操作叫做add
;当你完成一次工作,就可以把Index
中的一摞文件打包成一个文件夹,打上一个标签记录你修改了做了什么,这个操作叫做commit
,然后放进一个柜子里,这个柜子叫做一个分支,Repository
就是管理这个柜子的仓库。
我们每次工作——新建、删除、修改文件,最终都以一次次commit
的形式存储到Repository
的分支中,每次commit
都有一个指针地址,称为commit_id
,它按照从近到远的时间顺序排序起来,我们可以随时回退到某个版本。
还有一个空间Remote
是远程仓库,它的结构和本地仓库是一样的,我们通过一些指令可以将本地仓库与远程仓库进行同步。
Git连接远程仓库操作
1. 远程仓库给本地授权
本地创建SSH key
使用命令
ssh-keygen -t rsa -C "myemail@example.com"
,然后一路回车即可
然后在用户目录(Windows系统在C盘的user对应用户名目录下)可以找到id_rsa
(私钥)和id_rsa.pub
(公钥)两个文件
登陆GitHub,打开
Setting
,选择SSH and GPG Keys
页面,然后New SSH key
下面的Title随便写,key中填写
id_rsa.pub
中的公钥内容
这一步相当于在远程Remote上记录一下你的密钥,你在本地提交的时候只有远程仓库有记录,才能提交成功
2. 添加并初始化本地仓库
先在本地仓库运行git init
初始化本地仓库,init
就是初始化的意思
然后运行git add .
将本地仓库中的所有文件添加到缓存区,其中.
表示所有文件,这个指令的意思是把所有文件添加到缓存区。当然我们也可以利用git add file.md
只添加一个file.md
文件。
接着运行git commit -m"第一次提交代码"
,将缓存区中的文件记录提交给仓库,其中-m
表示提交的说明,为必填,每次提交代码我们都要进行提交说明,这是必要的。
再使用下面的方法进行关联远程仓库并进行第一次代码推送push。
3.1 添加远程仓库
创建远程仓库
这里的步骤就不说了,可以用Github也可以用Gitee等
在本地关联远程仓库
git remote add origin git@github.com:sumruler/yourRepo.git
这里的
origin
是远程库在本地的标记名字,通常习惯起名origin
,而git@github.com:sumruler/yourRepo.git
是远程仓库的地址,换成仓库中SSH下的字段
然后你可以运行一下
git remote -v
,就可以查看与远程仓库关联的信息进行第一次代码提交
在本地仓库运行
git push origin master:main
这里的命令结构是
git push <远程仓库名> <本地仓库分支>:<远程仓库分支>
master
是本地仓库的分支,当你运行git init
的时候,默认创建了这个分支,main
是Github远程仓库的分支,当你在Github上创建仓库的时候,默认创建了这个分支。如果远程仓库分支和本地仓库分支相同的时候可以省略后面,直接运行gut push origin
的,不过Github把主分支的名字改成了main
,所以给Github提交的时候要加上这个。还有一个办法是将
git init
初始化的时候默认分支名称设置为main
,方法是修改.gitconfig
文件,地址在用户根目录(Windows系统在C盘的user对应用户名目录下)下,加入下面代码并保存:# vim ~/.gitconfig [init] defaultBranch = main
第一次提交的时候,会出现这样的提示:
意思是告诉你这个远程连接信息从来没有被记录过,确定记录下来并进行链接吗?这时候输入
yes
然后敲回车就可以了
你还可能会遇到这样的问题,push的时候被rejected了,这是由于远程仓库和本地仓库出现了冲突(比如远程仓库README.md这个文件和本地仓库不一样等等),这时候你可以
git pull
一下,查看冲突的文件处理完冲突以后再重新push
,更加简单的你可以在git push
命令后面加上--force
这个命令,即git push --force origin master:main
,来进行强制推送,覆盖掉远程仓库的文件(第一次提交,远程仓库也没什么重要东西,直接覆盖就好了)如果是新建立一个项目,在本地并没有任何文件,或者想从远程仓库克隆一个项目,可以使用下面的3.2 从远程仓库克隆的方法
3.2 从远程仓库克隆
在某个目录下打开终端(Win系统可以在文件夹下按住Shift加鼠标右键,选择powershell,或者在窗口的地址栏输入cmd回车),运行
git clone <仓库地址>
,例如git clone https://github.com/sumruler/typora-theme-phycat.git
拉取远程仓库
仓库地址可以是
HTTPS
下的,也可以是SSH
下的运行
cd <仓库名>
例如cd typora-theme-phycat
进入远程仓库运行
code .
(前提是安装了VScode)用VScode打开仓库,然后你就可以操作文件了。
Git版本控制
Git最强大的功能之一就要版本控制,你每次修改文件做提交的时候,Git会记录你修改(包括新增、删除、修改)了什么,得益于此你可以随时回退到被记录的任意一个版本。你有必要回顾一下前面介绍的这部分。
Git原理图与简介
Git提交
git add <文件名>
--将工作区的更改放到缓存区
例如,我们更改了README.md这个文件,就可以使用git add README.md
将该文件的更改放到缓存区。如果你更改了多个文件,可以使用git add .
一次性将所有更改放到缓存区。.
就表示所有更改。
git commit -m"<描述>"
--将缓存区的更改整合到本地仓库
-m"<描述>"
这个选项是必须要跟的,一般在开发过程中记录下来每个版本修改了什么是非常有必要的
git push <远程仓库名> <本地仓库分支>:<远程仓库分支>
--将本地仓库推送到远程仓库
我们之前进行了第一次远程提交,后面做完每次修改运行一下这个命令,就可以把本地仓库同步到远程仓库中。远程仓库名为origin
可以省略不写,如过本地仓库分支和远程仓库分支同名,可以省略不写。
Git提交记录和版本回退
git log
--查看本地仓库所有历史版本
在本地仓库下使用git log
命令查看所有的版本,运行后你会看到类似的结果:
git reset --hard <commit_id>
使用git reset --hard <commit_id>
就可以把当前的workspace
、Reposity
都回退到这个版本,例如我可以使用git reset --hard 5b161
来回退到之前那个版本。commit_id
不需要写全,写前几位git就可以找到。
也可以用HEAD^
、HEAD^^
、HEAD^^^
、HEAD~100
来代替commit_id
,表示上一个、上上个、上上上个、往上100个。
git reflog
--查看所有操作记录
你可能会有这样的一个疑问,我回退了以后,回退之前的版本还有吗?如果我回退之后后悔了怎么办?怎么找到回退前那个版本的commit_id
。
Git还有个命令,我们可以使用git reflog
来查看你的命令记录,运行后你会看到:
这里最前面的字符就是commit_id
Git分支操作
主分支master
或者main
,往往是正式版本,它应该永远代表最稳定的一个版本。当开发进行中时,在main
分支上进行操作,让main
变得不稳定了,这时候我们就可以利用分支功能。
前面我们把Repository
比喻成管理柜子的仓库,分支就是一个一个的柜子。为了解决上面的问题,我们可以另外开一个柜子,叫做dev
,这个操作叫做branch
。然后我们在dev
上做开发,开发没问题了,再把dev
上地最后记录,合并到main
上,这个操作叫做merge
。我们还可以再开一些柜子,叫做bug1
,这些柜子专门用来解决各种各样的bug,没问题了再合并。我们还可以开一个Feature
,用来开发新功能。
总之,为了让主分支main
保持纯净,我们就用各种各样的分支来解决各种各样的问题。
Git分支的创建、管理与合并
git branch <分支名>
--创建分支
git branch
--查看所有分支
git switch <分支名>
或git checkout <分支名>
--切换到某个分支
git checkout -b <分支名>
或git switch -c <分支名>
--创建分支并立即切换到这个分支
git branch -d <分支名>
--删除某个分支
git merge <分支名>
--合并目标分支到当前分支
例如我们想把dev
分支合并到main
分支上,需要先使用git switch main
切换到主分支,然后运行git merge dev
将dev
分支合并到当前main
分支上
Git合并分支的冲突解决
- 感谢你赐予我前进的力量