Git是目前世界上最先进的分布式版本控制系统
Git与Github
Git是一个分布式版本控制系统,简单的说其实就是一个软件,用于记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的软件
Github是一个为用户提供Git服务的网站,简单的说就是一个可以放代码的地方(不仅仅是代码)。提供了丰富的功能
下载Git
前往Git官网,选择相应配置下载
默认即可,不需要更改
一路Next
安装完成之后,在文件夹,鼠标右键出现 Git GUI Here 和 Git Bash Here就算成功
Git的使用
本地仓库
工作流程
本地仓库操作
仓库又名版本库,英文名repository,我们可以简单理解成是一个目录,用于存放代码的,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除等操作Git都能追踪到
①在安装好首次使用需要先进行全局配置
桌面空白处右键,点击“Git Bash Here”以打开Git命令行窗口
//配置用户名和密码(每一个Git提交都会使用这些信息,他们会写入你的每一次提交中,不可更改,为了方便后续能跟踪谁做了修改)
//修改用户名和邮箱的命令与初始设置的命令一致,会将原来的用户名和邮箱重置掉
//
$ git config --global user.name "用户名"
$ git config --global user.email "邮箱地址"
//查看配置
git config --list
//配置信息如果太多需要退出可以输入q
②创建仓库
当我们需要让Git去管理某个新项目/已存在项目的时候,就需要创建仓库了。注意,创建仓库时使用的目录不一定要求是空目录,选择一个非空目录也是可以的,但是不建议在现有项目上来学习Git
不要使用包含中文的目录名
通常有两种获取Git项目仓库的方式
1.将尚未进行版本控制的本地目录转为Git仓库(初始化仓库)
2.从其他服务器克隆一个已经存在的仓库(用的更多)
创建目录(项目文件夹)
$ mkdir 目录名
在命令行进入项目目录(或者直接在创建好的目录文件夹下进入git Bash也可)
$ cd 目录
Git仓库初始化
1.$ git init
2.git clone xxx 新名字(则会将这个项目的名字改为新名字)
表现:执行之后会在项目目录下创建“.git”的隐藏目录,这个目录是Git创建的,不能删除也不能随意更改其内容(保存有版本信息)
记录每次更新到仓库
每当完成了一个阶段的目标,想要记录下它时,就将它提交到仓库
核心操作:
1.工作区开发
2.将修改后的文件添加到暂存区
3.将暂存区的文件记录到版本库
暂存区和版本库都被.git文件管理
查看当前状态:git status 【非必要】
可以用git status命令查看那些文件处于什么状态
1.红色:工作区有文件更改
2.绿色:暂存区有文件更改
3.nothing to commit: 没有任何文件更改
git add . 对添加的暂存区的文件进行追踪
工作区文件先添加到暂存区:git add 文件名
说明:git add指令,可以添加一个文件,也可以同时添加多个文件
语法1:git add 文件名
语法2:git add 文件名1 文件名2 文件名3 …
语法3:git add . 【添加当前目录全部文件到缓存区】
再提交至版本库:git commit -m “注释内容,提交信息”
对于后续文件(可以操作1个或多个)操作之后,充分使用git add与git commit指令即可
查看尚未暂存文件的改变【git diff】
查看已暂存文件的改变【git diff --staged】
查看指定文件的改变,只需要在git diff 后面加文件名即可
移出暂存区【git restore --staged “文件名”】
将未在暂存区的修改的文件的内容进行撤销【git restore “文件名”】
删除文件
1.文件未加入到暂存区,直接删除文件,或者使用系统命令:rm 文件名
2.文件已加入到暂存区:将文件从暂存区总移除,再删除(比较麻烦),推荐使用【git rm -f 文件名】 来直接删除文件
3.已纳入版本控制的文件,进行修改后,无论是加入暂存区还是未加入暂存区,使用【git rm -f 文件名】来直接删除文件
Git的版本回退
版本回退分为两步骤进行操作
步骤:
①查看版本,确定需要回到的时刻点
指令:
//显示完整信息,版本号,谁提交的,什么时候提交的,提交信息
git log
//以一行描述提交信息(版本号的前几位和提交信息)
git log --online
//查看更加完整的历史记录
git reflog
②回退操作
指令:
git reset --hard 版本号
注意:回到过去之后,要想再回到之前最新的版本的时候,则需要使用指令去查看历史操作,以得到最新的commit id.(版本号)
指令:git reflog
小结:
要想回到过去,必须先得到commit.id,然后通过git reset --hard进行回退
要想回到未来,需要使用git reflog进行历史操作查看,得到最新的commit.id
在写回退指令的时候commit id可以不用写全,git自动识别,但是也不能写太少,至少需要写前四位字符
Git忽略文件
我们总有些文件无需纳入Git管理,也不希望它总出现在未跟踪文件列表,通常都是些自动生成的文件,比如日志文件,或者编译过程中临时创建的文件等。在这种情况下,我们可以创建一个名为.gitignore的文件,列出要忽略的文件
# 这里演示的部分语法
# #之后的内容是注释,会被Git忽略
# 忽略 info.txt文件(同级目录下)
info.txt
# 忽略 .vscode/ 目录下所有的文件
.vscode
# 忽略目录下所有.md结尾的文件
*.md
# 忽略 doc/目录下扩展名为txt的文件
doc/*.txt
创建Github远程仓库
Repository name:设置仓库的名字
public/private:设置仓库私有还是共享
两种常规使用方式
基于http协议
a.创建空目录,名称为shop
b.进入shop目录
使用clone指令克隆线上仓库
语法:git clone 线上仓库地址
在创建的目录里面又出现了一个shop文件夹 为仓库
c.在仓库上做对应的操作(提交暂存区、提交本地仓库、提交线上仓库、拉取线上仓库)
提交线上仓库的指令为 git push
在首次往线上仓库shop提交内容的时候出现了403的致命错误,原因是不是任何人都可以往线上仓库提交,必须需要鉴权
需要修改“.git/config”文件内容:
修改url为 :url=https://用户名:密码@后面不变
提交成功,线上同步更新
拉去线上最新版本:git pull
基于ssh 协议
该方式与前面https方式相比,只是影响github对于用户的身份鉴权方式,对于git的具体操作(如提交本地、添加注释、提交远程等操作)没有任何影响
生成公私钥对环指令(需先安装OpenSSH):ssh-keygen -t rsa -C"注册邮箱"
步骤:
①生成客户端公私钥文件
②将公钥上传到Github
实际操作:
①打开提示
②创建公私钥对文件
执行指令后连续回车即可
③:上传公钥文件内容(id_rsa.pub)
分支管理
使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线
在版本回退的章节里,每次提交后都会有记录,Git将它们串成时间线,形成类似于时间轴的东西,这个时间轴就是一个分支,我们称之为master(main)分支
分支相关指令:
查看分支(防止创建分支重名):git branch
创建分支:git branch 分支名
切换分支:git checkout 分支名
删除分支:git branch -d 分支名
//再切换回主分支合并之前,当前分支要进行暂存提交到版本库
//查看当前分支状态 git status
合并分支(可以将某个分支上所有的commit,并到当前分支的commit):git merge 被合并的分支名
//快捷命令
切换+创建分支:git checkout -b 新分支名
强制删除分支:git branch -D 分支名
注意:当前分支前面有个标记“ * ”。
分支合并:
现在先在dev分支下的readme文件中新增一行并提交本地
切换到main分支下观察readme文件
将dev分支的内容与master分支合并:
删除分支
master分支拿到了dev分支的内容 删除dev分支
Git分支-冲突
如果你在两个不同的分支中,对同一个文件的同一部分进行了不同的修改,Git就没法干净的合并他们
手动根据提示修改冲突之后,需要再次提交 git commit -m “合并冲突提交”
推荐的图形化工具
①Github for Desktop
② source tree
③TortoiseGit
忽略文件操作
在写规则的时候以#开头默认为注释
github与本地仓库如何链接。
【已解决】! [rejected]main -> main (fetch first) error: failed to push some refs to ‘https://github.com/x
vue上传项目到git时,忽略node_modules文件夹
fatal: The current branch master has no upstream branch.之解决方法
先看这个
注意创建远程仓库时,如果选择了创建了.md文件,那么本地没有 我们使用以下命令用来将本地仓库的历史记录与远程仓库不相关的历史记录合并的
先拉去合并
git pull origin master --allow-unrelated-histories
在进行首次提交
git push origin master
git push报错:![rejected] master -> master(non-fast-forward) error:failed to push some refs to XXX
Git远程仓库细节
与远程仓库相关的指令
查看远程仓库【git remote -v】
重命名远程仓库 【git remote rename 旧名字 新名字】
移除远程仓库【git remote rm 远程仓名】
从远程仓库中抓取和拉取
从远程仓库中获得数据,可以通过git fetch和git pull这两个命令完成
git fetch(适用于团队开发,多个版本间存在自己不知道的差异):将远程仓库的最新内容抓取到本地,它并不会自动合并或修改你当前的工作,需要用户自己检查了以后再决定是否合并入工作,命名格式为:
git fetch <远程仓库名> <远程分支名>:<本地分支名>
git pull(将远程仓库的最新内容拉取后直接合并),即:git pull=git fetch+git merge,这样可能会产生冲突,需要手动解决,命名格式为:
git pull <远程仓库名> <远程分支名>:<本地分支名>
git pull origin master:brantest :将远程仓库origin的master 分支拉取过来,与本地的brantest分支合并
git pull origin master:如果远程分支要与本地的当前分支合并,则冒号后面的部分可以省略