本文主要是介绍Git、Github、Gitee和GitLab这四者,以及前三者的基本使用,并且还还有IDEA搭配前三者的使用,手把手教你如何在IDEA中使用前三者。
学习建议:
- 建议平时多逛Gitee和Github,同时多使用Git将自己的代码提交到Gitee或Github上,以此熟悉Git常用命令的使用
- 建议在学完Linux后再学Git,毕竟Git就是为Linux而生的
如果觉得本文对你有所帮助,欢迎点赞👍、收藏⭐,如果文章有个别错别字、或表示不当、或错误,恳请评论✍指出,在下不胜感激
Git是什么?
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。本质是一个系统软件。
是[Linus Torvalds](https://baike.baidu.com/item/Linus Torvalds/9336769)为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件,用来替代BitKeeper的(PS:因为开发BitKeeper的公司要收费,Linus Torvalds觉得你 ™ 一个这么"简单"的东西居然™还好意思要收费,于是就花两周研发出了Git,这场景有点像他当初想研究Unix的原理,但是Unix要收费,于是他自己就研发了Linux,O(∩_∩)O这就是大佬吧!”你不给老子用,老子就自己开发一个出来“😆真强!同时Git是如今世界上最好用的分布式版本控制系统)。
在学习Git前让我们一起来拜一拜🙇🙇祖师爷吧~ o( ̄▽ ̄)ブ(老爷子👴还健在ヾ(•ω•`)o)
祖师爷的图片挂了(CSDN居然连祖师爷的图片都不让展示w(゚Д゚)w),所以在下只能提供链接供大家参拜😆
👉:Git祖师爷
什么是版本控制?
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
其主要作用是:方便查看(或回退到)历史版本,方便多人协作,提高开发效率
版本控制主要有:
本地式版本控制
、集中式版本控制
、分布式版本控制
本地式版本控制:
所有的版本数据存储在本地1。记录文件每次的更新,可以对每个版本做一个快照2,或是记录补丁文件,使用于个人,相代表产品:RCS……
集中式版本控制:
所有的版本数据都存在服务器上。用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS……
分布式版本控制:
所有版本数据全都会同步到每个用户的电脑上。这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。代表产品:Git、Mercurial、Darcs……
Git的优点:
了解了这么多Git的优点,我们也有必要了解Git一个主要的缺点,那就是存在安全隐患。Git是分布式版本控制,所有版本信息都会同步到每个用户的电脑上,如果在公司中使用Git,很容易就将系统的重要信息给泄露出去。
Git有什么用?
为什么要学习Git?
因为去公司上班肯定是要一群人一起开发东西,这就需要共同协作,不可能一个公司就你一个人吧?其次就是使用git能很迅速地将远程仓库(比如:GitHub、Gitee)中的项目进行克隆到本地,是一个是非好用的工具,就比如有打火机不用还去钻木取火?
学习站点:
方式一:直接去官网下载 Git官网
步骤如下:
方式二:镜像下载(推荐) 🚪传送门
官网下载速度优点慢,主要原因有以下几点:
- Git服务器在国外,距离我们较远。学过计算机网络的都知道,访问一个站点,需要路由转发,距离越远所消耗的时间越长
- 国内存在网络防火墙,无法直接访问外网,需要翻墙
步骤如下:
下载后就可以直接进行安装,无脑下一步即可!安装完毕就可以使用了!
Git卸载步骤: 删除 G i t 的环境变量 → 卸载即可 删除Git的环境变量\rightarrow{卸载即可} 删除Git的环境变量→卸载即可
安装成功后在开始菜单中会有Git项:
**Git Bash:**Unix与Linux风格的命令行(推荐)
**Git CMD:**Windows风格的命令行
Git GUI:图形界面操作Git(不推荐)
任意文件夹下右键都可以看到对应的Git菜单:
打开后就可以通过直接敲指令来使用Git了O(∩_∩)O
由于Git和Linux同出一脉,他们的创造者都是Linus,并且Git本来就是Linus创建出来为了服务Linux的,所以可以直接在
Git Bash
窗口使用Linux的指令,常用Linux指令请参考:Linux常用指令大全(分类明确,用法介绍详细)
推荐阅读:Git索引 | 猴子都能懂的GIT入门
温馨提示:
如果大家觉得这些命令太多,可以只记带星号*****的(●ˇ∀ˇ●),其他命令等需要用到的时候,
再从收藏夹里找出来看,欢迎收藏( •̀ ω •́ )✧
如果觉得带星号*也太多了,就直接看3.3小节吧
一、git安装后-指定名称和邮箱(用户签名,首次安装git必须设置,否则无法提交代码)
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
二、创建版本库
$ mkdir learngit //创建
$ cd learngit //使用
$ pwd //查看当前目录
$ git init //初始化,生成.git文件(若该文件隐藏,则使用ls -ah)
*三、把文件添加add和提交commit到版本库
$ git add test.txt //添加暂存区指定文件
$ git add . //提交暂存区所有的文件
$ git commit -m "提交说明信息" 文件名//提交
$ git commit -m "提交说明信息" . //一次性提交多个文件,注意:必须在当前版本库和当前目录下
*四、版本控制
$ git log //查看提交历史记录,从最近到最远,可以看到3次
$ git log --pretty=oneline //加参,简洁查看
$ git reflog //查看每一次修改历史
$ cat test.txt //查看文件内容
$ git status //查看工作区中文件当前状态
$ git reset --hard HEAD^(HEAD~100)(commit id) //回退版本,版本号可以使用git reflog查看
$ git checkout -- test.txt #丢弃工作区的修改,即撤销修改
$ git reset --hard #将所有内容回退到最近一个未修改的版本
$ git reset HEAD test.txt #丢弃暂存区的修改(若已提交,则回退)
五、删除文件
$ rm test.txt
//直接删除
$ git rm test.txt
$ git commit -m "remove test.txt"
//删错了,恢复
$ git checkout -- test.txt
*六、远程仓库
$ ssh-keygen -t rsa -C "youremail@example.com" //创建SSH Key
$ git remote add origin git@github.com:Daisy/AKgit.git //关联
$ git push -u origin master //将本地内容推送到远程仓库(第一次)
$ git push origin master //将本地内容推送到远程仓库(之后)
$ git remote -v //查看远程仓库信息
$ git remote rm origin //删除远程仓库(解绑)
$ git clone git@github.com: Daisy/AKgit.git //克隆远程仓库
//克隆之后使用和查看
$ cd gitskills
$ ls
$ git remote //查看远程库的信息
$ git remote -v //查看远程库的详细信息
*七、多人协作(分支操作)
$ git checkout -b 分支名 //创建并切换到分支
$ git branch 分支名 //创建分支
$ git checkout 分支名 //切换分支
$ git merge 分支名 //将分支合并到当前分支
//新版本
$ git switch -c 分支名 //创建并切换到分支
$ git switch master //直接切换分支
$ git branch //查看当前分支
$ git merge dev (--no-ff)(-m)//合并,把dev分支的工作成果合并到master分支上
$ git branch -d 分支名 //删除分支
$ git stash //将现场储藏起来
$ git stash list //查看储存的工作现场
//恢复和删除
$ git stash apply
$ git stash drop
//恢复并删除
$ git stash pop
$ git cherry-pick 4c805e2 //复制修改
$ git push origin master(dev) //推送分支
$ git checkout -b dev origin/dev //创建远程origin的dev分支到本地
$ git pull //抓取分支(解决冲突)
$ git branch --set-upstream-to=origin/dev dev//指定本地与远程dev的链接
$ git rebase //把本地未push的分叉提交历史整理成直线
八、标签管理
$ git tag v1.0 //打标签
$ git tag -a v0.1 -m "version 0.1 released" 1094adb //指定标签名和说明文字
$ git tag //查看所有标签
//若是忘记打,则查找历史提交commit id ,再打上
$ git log --pretty=oneline --abbrev-commit
$ git tag v0.9 f52c633
$ git show v0.9 //查看标签详细信息
$ git tag -d v0.1 //删除标签
$ git push origin v1.0 //推送标签到远程
$ git push origin –tags //一次性推送全部本地标签
//删除标签,(若已推送到远程,先从本地删除,从远程删除)
$ git tag -d v0.9
$ git push origin :refs/tags/v0.9
九、自定义git
$ git config --global color.ui true //让git显示颜色
//忽略特殊文件
//.gitignore文件
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
# My configurations:
db.ini
deploy_key_rsa
//把该文件也提交到git
$ git add -f App.class //强制添加被忽略的特殊文件
$ git check-ignore -v App.class //检查哪个规则出错
# 排除所有.开头的隐藏文件:
.*
# 排除所有.class文件:
*.class
# 不排除.gitignore和App.class:
!.gitignore
!App.class
$ git config --global alias.st status //配置别名
$ git config --global alias.unstage 'reset HEAD' //配置操作别名
$ git config --global alias.last 'log -1' //显示最后一次提交信息
$ git last //显示最近一次的提交
$git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" //颜色
$ cat .git/config //查看每个仓库的git配置文件
$ cat .gitconfig //查看当前用户的git配置文件
要使用Git首先需要设置用户签名,否则提交代码会报错,用户签名的设置主要用到两个指令
git config -global user.name 用户名
:设置用户名git config-global user.email 邮箱
:设置用户邮箱(Git不会对邮箱进行验证,但是必须要要设置)设置好后可以去C盘的**.gitconfig**进行查看:
注意:用户签名跟我们使用Git访问的远程库Github或Gitee的账号密码没有关系,它只是一个标记,让Git知道现在是谁在操作Git,因为可能这个Git不止一个用户在使用,每个用户的配置信息很可能都是不一样的
初始化本地库。设置好用户签名后,还需要使用git init
指令初始化本地库,否则无法使用Git操作你的代码
在文件中使用初始化指令后会出现一个**.git**文件:
注意:这个文件夹默认是隐藏的,需要在查看中勾选隐藏项目,才能看得到。同时一定不要顺便去修改它
查看Git相关的配置信息 :
git config -l
:查看Git所有配置信息
git config --system --list
:查看系统配置文件
git config --global --list
:查看当前用户配置
git config user.name
:查看当前用户名
git config user.email
:查看当前用户邮箱
Git系统配置文件所在位置:(里面存放的是Git的系统配置信息,可以通过
git config --system --list
进行查看)知识拓展:Linux中系统文件都是存放在gitcofig文件中
Git用户配置文件所在位置:(里面存放的当前用户的Git配置信息,可以通过
git config --global --list
指令进行查看)
Git配置文件介绍:
常用命令 | 作用 |
---|---|
git init | 初始化本地库(准确来讲是创建一个本地库) |
git clone | 将远程仓库的项目克隆到工作区 |
git add 文件名 | 将工作区中的文件添加到暂存区 |
git commit -m "提交信息" 文件名 | 将暂存区的文件提交到版本库 |
git push | 将本地库的文件推送到远程仓库 |
git pull | 将远程仓库的文件拉取到工作区 |
git stash | 将修改的代码先暂存起来,让本地仓库回到最后一次提交时的状态 |
Git本地有三个工作区域:工作区(Working Directory)、暂存区(Stage或Index)、版本库(Repository或Git Directory)。如果在加上远程的GIt仓库(Remote Directory)就可以分为四个工作区域。
文件在这四个区域之间的转换关系如下:
工作区:是在你本地电脑上的一个文件夹,里面是你的代码(可以是任意的,只要能写代码就行)。如下图所示:
暂存区:是在版本库中的一个index文件,属于版本库中一块特殊的区域,要想进入版本库必须先进入暂存区(虽然它属于本地库,但是一般我们将它和版本库分开讲)
版本库:(也称本地库)是在你工作区中的一个**.git隐藏文件夹**,注意它虽然工作区中,但是却不属于工作区,只是物理上在工作区中而已。
这里需要注意的是,文件提交到版本库后,文件仍然能在工作区上看见,但是每次切换版本或者分支,提交到版本库中的文件都会改变,而在工作区中的文件是不会随着分支的切换而改变的
远程库:是用来存放代码的地方,不在本地。一般我们用到的远程库有Github、Gitee,当然也可以使用GitLab自己搭建一个远程库
可能我们使用Git在一段时间操作了许多文件,当我们想要提交时,为了区分要哪些是要提交的文件,哪些是不需要提交的文件,Git就将文件分为了四种状态,这四种状态分别是:未追踪踪态(Untracked)、暂存态(Staged)、未修改态(Unmodify)、已修改态(Modified)
说明:
git add
指令就进入暂存区,同时文件转变称追踪态,也称暂存态。未追踪态的文件通常是红色的,已追踪态的文件是绿色的;git commit
指令就进入未修改态;如果执行git rm --cached
将暂存区中的文件删除,文件重新进入未追踪态;git add
变成暂存态(使用git status查看仍然是已修改态,只是文件变绿了);如果执行git rm --cached
将暂存区中的文件删除,文件重新进入未追踪态;如果执行git commit
文件变成未修改态;如果文件按执行git checkout
文件变为未修改态,和提交不同的时,这个会从版本库中取出对应文件,讲暂存区中修改过的文件进行覆盖;vim
修改, 会变为Modified
(此时也是未追踪态),修改的文件在暂存区中;如果使用git rm
指令将文件移出版本库, 则成为未追踪态;状态转换演示:
初始本地库查看状态:git init
指令初始化本地库,然后使用git status
指令查看本地库的状态:
新建文件查看状态:在工作区中新建一个文件,不使用用git add
将未追踪态转成暂存态:使用git add
追踪文件,让文件按编程暂存态:
暂存态变成未修改态:使用git commit
将暂存态的文件提交到本地库
未修改态变成修改态:使用vim
指令对文件进行修改,文件变为已修改态,但是文件会重新变回未追踪态
未追踪的修改态变成追踪的修改态:
未修改态变成修改态:
验证未跟踪的已修改态是在暂存区中的:
- Step1:先将一个文件正常提交到本地库
- Step2:然后使用vim进行修改,产看文件状态
- Step3:直接提交修改后的文件(注意这里不要使用git add)
- Step4:使用
git reflog
查看当前HEAD指针的指向结果判断:如果执政指向了后面提交的文件,则说明我们提交成功,未跟踪的已修改态在暂存区中,同时未跟踪态不一定是在工作区中。反之则验证失败!(主要是这里老师没有讲清楚,不得不验证一下)
当我们每次修改一次文件,提交到本地库后就会产生一个历史版本,版本穿梭就是通过指令进入到某一个版本,每一个版本都有各自特有的数据,特有的环境,不受其它版本的影响。所以不能随便提交到本地库,一旦提交错误的代码这个版本就无法改变了,只能使用其它版本进行替代了。
版本穿梭常用命令:
指令 | 作用 |
---|---|
git reflog | 查看版本信息 |
git reset --hard 版本号 | 跳传到版本号对应的版本 |
什么是分支?
分支就是一个单独的副本。在版本控制中,我们可以为每一个任务创建一个分支,使用分支意味着程序员将工作于主分支进行了分离,开发自己的分支时不会影响其他分支,如果觉得分支功能很好,可以和主分支进行合并。(分支的底层就是指针,版本穿梭的底层原理也是指针,因为Git是用C写的)
分支和版本的关系:
一对多的包含关系(类似于集合和集合元素的关系),一个分支可以拥有多个版本,一个版本只能属于一个分支!
分支的底层实现原理:就是指针,Git和Linux都是使用C语言写的。使用HEAD指针指向所在分支,然后通过分支heads下的分支文件指向所在版本
当在一个分支中(假设是master分支)进行版本穿梭时,HEAD文件中的数据不会发生改变,而heads下master文件中的版本信息就会发生改变,让master指针指向穿梭的版本(相当于是上图中两个指针同时移动);当进行分支切换时(假设是由master切换到hot-fix),则HEAD文件中的数据会发生改变,让head指针指向hot-fix指针
简而言之就是:头执政确定分支,分支指针确定版本,头指针只能有一个,分支指针可以有多个
分支的好处
分支操作常用命令:
命令 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定分支合并到当前分支 |
注意事项:
分支的创建、分支的切换,首先需要版本库中有文件。
当我们刚刚初始化一个本地库时,如果版本库中没有文件,无法查看到当前所在的master分支,无法创建分支;当版本库中有文件后,随时都能进行分支的创建和切换、
工作区中的文件不会随着分支的切换而改变。
工作区的文件所有的分支都能通过cat
指令查看到,因为cat
指令实际上查看的是工作区的文件,当我们切换分支时,工作区里面那些提交到版本库的文件内容会随之改变,但是工作区中的文件不会改变
切换分支时,一定要将修改过的分支提交到本地库。
当我们切换到其他分支,修改完文件后,此时文件在暂存区,如果不提交到本地库,其它分支的该文件也会被修改!
分支合并产生冲突,手动修改后的文件提交时不能写文件名,分支合并只是改变一方
备注:2.和3.可以合并为一点,也就是非本地库的文件分支切换时具有全局性
以上这些都是一些重点注意事项!不注意很容易出错!
示例1:
需要先存在一个分支,创建和切换分支分支必须先要将工作区的文件提交到本地库,否则无法创建分支
示例2:
使用
git commit
指令提交到版本库的文件会随着分支的切换而改变,但是工作区的不会
示例3:
分支切换时如果不将暂存区的文件提交到版本库,则会影响到到其它分支
示例4:
冲突出现的原因:因为我之前在mster分支对test.txt文件进行了修改然后提交,又在hot-fix分支中对test.txt文件进行了修改,系统不知道我们合并是以那个为准(需要手动合并),就会产生冲突(当我们只修改一个文件是,合并以被修改的为准)
备注:Git中合并其实就是覆盖,Git默认是将合并的两个文件,用修改过的去覆盖掉没有被修改的;如果两个文件都被修改,它就不知道要覆盖谁,就需要你手动去修改(也就是vim进入编辑模式,哪里不需要删哪里)
合并后的文件,提交时,一定不能有文件名,否则报错:
同时合并分支,只是修改了当前所在分支,合并过来的分支没有改变!
比如这里,我们在master中进行了分支合并操作,将hot-fix的test.txt合并到master分支上的test.txt,只有master分支上的test.txt改变了,hot-fix上的test.txt内容不改变
跨团队协作:
什么是Github?
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub。
官网:Github
Github的前世今生:这里
Github的作用有哪些?
提供代码托管服务
提供代码存储。可以在Github上建造属于你的个人仓库,存放你的代码,GitHub本质就是充当Git的一个远程库角色,同时也是全球最大、使用人数最多的Git远程库
方便找寻项目资源。有很多人将优秀的代码都放在Github上的仓库中,并且Github是强烈支持开源的,很多人都会将仓库设置成public,大家都能进行访问并下载
提供代码在线编辑功能。可以直接在线编辑你的代码,或者更改别人的代码(必须经过被人授权)
提供信息交流。Github作为全球最大的同性交友平台,我们可以通过邮箱或者拉取请求窗口与其他人友好交流,同时上面有很多计算机界的大牛,这里我就推荐几个大牛:
Linus Torvalds,嘿嘿,这个人大家肯定都很熟悉吧,就是开篇那位Git祖师爷😆
它也是开源界的领袖人物,一身都在致力于开源事业,看看这位勤奋的祖师爷,我们还有什么理由不努力呢😃
John Resig:JQuery的创始人,同样也是一尊大神
Jake Wharton:Android之神,GitHub 全球排名第二位!
……
看到这里,不禁感慨,大神之所以是大神,勤奋是必不可少的,加油吧少年(ง •_•)ง
什么是代码托管服务?
通俗来讲,代码托管服务就是指在保证代码唯一性的前提下,实现多人共同协作开发,我们只需要通过一些指令就能操作托管的代码,无需关心如何实现。比如我们将本地库的代码通过push推送到Github上,我们只需要敲一个指令就可以了,Github就能直接接收代码,同时对代码进行保护和管理,其它人要用或者要修改需要经过你的同意。顺便提一句,托管服务不一定需要联网,Git也是拥有托管服务功能的,只是只能在本地进行,所以通常选用Github作为代码托管平台
代码托管的作用有哪些?
……
温馨提示:如果觉得Gitub访问太慢,主要有三个选择(实际上更多,下面三种方法是我亲测有效的)
- 搭建CDN,推荐链接在下面,这个方法最稳,但是相对而言比较麻烦,推荐指数⭐⭐⭐
- 使用镜像访问,GitClone - GitHub缓存加速网站,为开发者服务,这个最简单,虽然也能访问到GitHub上的资源,但是不能访问原本的,也不能使用GitHub仓库(失去了灵魂),顶多用来找资源,推荐指数⭐⭐
- 使用插件加速,推荐使用:GitHub加速,这个相对简单但是插件不太稳定,推荐指数⭐⭐⭐⭐
仓库的建立:
删除库:
前面我们已经学会了如何在GitHub上创建、删除仓库,现在我们就来学习使用本地库和GitHub建立连接,然后进行代码的推送和克隆操作吧。
常用指令:
git romote -v #查看当前所在远程地址的别名
git remote add 链接的别名 仓库的链接[https://github.com/Chinafrfq/Test/test1] #给链接创建起别名
git clone 仓库的链接 #克隆远程仓库
git pull 链接别名(或链接) 分支名 #将远程库对应分支中的文件拉取到本地库的当前分支
git push 链接别名(或链接) 分支名 #将本地库对应分支中的文件推送到GitHub上对应的仓库里面
将分支推送到远程库
本地库访问Github主要有两种方式,一种是HTTPS(安全访问),一种是SSH(免密访问)。相较而言HTTPS访问起来更加简单、安全,但是需要登录账号,但SSH的方式进行访问Github要快上许多。2.2.1 我们使用的HTTPS的访问方式,这里我们用一下SSH免密访问
$ ssh-keygen -t rsa [-C 设置的邮箱] # 指定未某一个账号设置免密登录,后面[]中也可以不用,默认使用当前账号
# 然后连续敲三次回车
备注:除了使用rsa加密算法,还可以使用Ed25519
执行完上述步骤后,在C:\Users\ghp
目录下会生成一个**.ssh**文件夹
将公钥的内容复制到Github上:
注意事项:
- (细节非重点,但是要了解)最好先到windows菜单中查看凭据管理器,凭据管理器会自动记住一个账号,如果我们在一台电脑上使用多个账号,系统会默认push到凭据管理器记住的那个账号
- 只能将本地库的文件push到远程库,工作区的文件push直接报错,暂存区的文件push无报错,但是显示无任何数据更新;
- 成功push的文件,会直接进入本地库
Step1:复制访问链接。创建好仓库,我们点击查看仓库,然后复制访问链接,本地库使用访问链接进行访问
这里既可以选择HTTPS也可以选择SSH,也可以使用SSH免密登录,2.2.0小节有介绍
Step2:给访问链接起别名
在本地库中,将访问的链接起一个别名(有点类似于域名,就是方便记忆)
Step3:push文件。将本地库的文件推送到Github对应的仓库中
工作区的文件按push直接报错:
暂存区的文件提交,显示无数据更新:(红色的已修改态也是在暂存区,所以提交也是下面这种情况)
将文件提交到本地库,然后就可以成功提交了:
现在就能在GitHub上的Test/test1仓库中看到刚刚提交的文件了:
pull操作主要是用来跟新本地库的代码的。
注意事项:
- 如果我们将远程库的文件进行了修改,又将本地库的文件进行了修改,此时进行pull操作会本地库文件更新失败!
Step1:修改仓库的文件。将之前push到仓库的hello.txt文件进行修改
Step2:修改本地文件。将本地库的hello.txt文件进行修改
Step3:进行pull操作。直接出现失败,显示需要进行文件合并
解决方案:
方案一:暂存文件。执行git stash
指令后将修改过的代码封存起来(存到一个栈中),同时回退到未修改的版本,再进行pull
操作,此时我们就能够成功pull到远程库修改过的代码了,最后建议将栈中的文件pop
出来,不然栈会溢出
git stash
指令将修改的文件放到栈中暂存起来,然后将文件出栈Step2:手动合并代码,然后进行提交
注意:提交时不要写文件名
方案二:回退版本。
git reset --hard
指令回退到之前的版本pull
指令进行拉取两种方法的比较:推荐使用方法一,因为它既能保留本地库中文件的修改部分,又能保证远程库中文件修改的部分;方法二会直接将覆盖掉本地库中修改的部分,假如你只是想要远程库的代码,可以使用这种方式,同时需要注意git reset --hard
指令的坑:使用这条指令会直接将暂存区的文件清空!!!!请谨慎使用
克隆干了三件事,
init
、pull
、remote
注意:
origin
一般一个项目很难一个人完成开发,毕竟不是每一个人都是全栈开发师,所以我们需要进行团队协作,Github就提供了一个团队协作的功能。首先需要项目(也可以说是远程仓库)的创建者向其它成员发起邀请,其它人接收了邀请就能一起参与开发了,大家能够将这个远程仓库的代码Clone到本地,然后一起完善各自的部分,最后再push到这个远程库。
Step1:创建仓库,并发送邀请函
邀请链接:https://github.com/Chinafrfq/Test-test1/invitations
Step2:被邀请者同意邀请
由于只有一个人,同时我也懒得再创建一个账号了,所以就到此为止了吧<(^-^)>
当项目的创建者,向我们发送邀请,我们同意以后,就能够直接来到他们的仓库,然后将仓库中的代码要么fork到我们自己的远程仓库进行在线修改,要么clone到本地仓库,使用IDE进行修改
Step3:被邀请者修改,其它成员接收请后,可以看到你仓库中的项目,有两种方式可以修改代码
方式一:frok。将你仓库中的代码fork到其它成员的仓库中,直接再仓库中进行修改(这个很费功力)
方式二:clone。将你仓库中的代码clone到本地,使用IDE进行修改,修改好后再push一下就OK了
这里就详细讲解一下frok代码的流程
1)fork 代码
2)将fork到远程库中的代码进行修改:
3)提交代码:
当我们使用fork将别人的代码叉到我们自己的仓库后,我们虽然进行了修改,并且进行了提交,但是提交的代码仍然是在我们自己的仓库,我们还需要将代码发送给别人
1)发送拉取请求:
2)项目的创建者只要接收拉取请求,就可以看到别人修改的代码,同时别人还可以点击comment发送信息给拉取请求发出者
同时创建者还可以点击Merge pull request进行代码合并
在使用IDEA集成Git前,我们需要给GIt配置忽略文件
什么是忽略文件?
我们使用IDE的时候,都会生成一些IDE相关的配置文件,这些文件不参与项目的实际运行
为什么要忽略文件?
为了提高代码的移植性。当我们将项目push到远程库,其它人进行拉取的时候,可能由于使用的IDE不同,就会导致运行失败,所以我们需要将这些与IDE相关的配置文件忽略掉,这样在push代码文件时时就不会将这些文件也上传到Github上
IDEA集成Git的步骤:
Step1:编写忽略文件,格式: XXX.ignore
(建议命名未git.ignore)
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml
Step2:在Git的用户配置文件中引用忽略文件
Step3:配置IDEA访问Git的路径
Step4:创建本地库
执行Add操作
将项目文件提交到本地库中,将文件添加到暂存区,添加成功后文件会由红变绿
备注:这里未添加看到是绿色的是因为我已经提交过一遍了
执行commit操作:
将文件提交到本地库后,文件会由绿变白(或黑,根据你的主题变化,夜晚主题是白色的,白天主题是黑色的)
修改提交过的文件:
修改文件:
修改后的文件由白变蓝
此时文件由蓝变白
查看各版本的信息:
版本切换:
同时当前目录下的代码页发生了改变!
创建分支:
分支切换:
备注:黄色代表头指针,绿色的代表分支指针
合并分支:
解决代码合并冲突:
当两个分支都进行了修改,然后再进行合并就会发生合并冲突。解决方法和前面是一样的,都是手动合并
IDEA十分智能,合并后的代码会帮我们直接添加到本地库中,无需再手动添加
登录Github账号:
温馨提示:这个Github按钮一般是IDEA自带的,社区版可能没有,需要到插件商店下载Github插件
这里页可以使用账号登录,也可以使用Token登录。Token登录需要生成口令,地址如下:
⚠==注意==:口令只会显示一次,一旦刷星就再也找不到了,建议将口令存在一个文件中
登录成功O(∩_∩)O
除了图形化界面执行Git指令外,还可以在Terminal窗口敲git指令(推荐)
使用IDEA上传代码到Github上
上传的项目是直接放在新创建的远程库中,相当于执行了创建远程库
+push
,再Github的仓库中可以查看到分享的项目:
push操作主要用来将我们在本地库中写好的代码上传到远程库
注意事项:如果本地库的代码比远程库代码的版本低,无法进行push操作!一个成熟的程序员在push之前都会检查本地库和远程库的区别,如果发现本地库的代码版本低于远程库代码的版本,在修改本地代码前一定要先pull一下,否则修改了也push不上
方式一:
方式二:
如果想使用SSH登录,可以手动设置:
pull操作和push操作一样也有两种方式,主要用来更新本地库的代码
注意事项:如果本地库的代码和远程库的代码都进行了修改,此时进行pull会出现合并冲突,需要手动合并,详情参考:前面
pull冲突合并演示:
方式二:
Gitee是什么?
Gitee是一个托管平台,是开源中国创建的。
Gitee的作用是什么?
主要作用和Github一样,其主要目的还是为了解决国内访问Github慢(前面有介绍)
Gitee和Github的区别:
和Github基本一致(由于Gitee全是中文可以说对于英语水平不高的而言还更加简单),具体可以参考Github的使用方式(PS:毕竟Gittee是Github的模仿者)
Step1:安装插件
Step2:登录账号,这个和Github是一样的
PS:layne2017@163.com
Gitee的操作和Github极其类似,毕竟Gitee是Github的仿照者,这里就不详细介绍了
导入Github仓库:
嘿嘿,这才是Gitee的核心功能,就是国内下载Github上项目的跳板,假如Github访问、下载很快的话,谁还用Gitee,
但这里有一说一Github还是不太安全的,古语云”非我族人,必有异心“,从前段时间Github封禁俄罗斯开发人员的账号就可以知道了,开源没有国界,但是开源者有国界;科学没有国界,但是科学家有国界,在最危难的时候还是得靠祖国!
当我们成功在Gitee导入了Github上的项目后,当Github上的项目更新了,Gitee上的项目也可以动过手动刷新
跟新后,可以看到我在Github上添加的语句也能在Gitee上看到了
GitLab是什么?
GitLab是一个基于Git的代码仓库管理工具(和Github是类似的)。
Gitlab是由两名乌克兰程序员创建的,起初是完全开源的,后来拆分成社区版(收费)和企业版(不收费),这一点也无可厚非啊,毕竟好用,别人开发者也需要吃饭啊(●ˇ∀ˇ●),而且它一部分功能是采用最新的go语言编写的。GitLab一般用于公司自键Git代码仓库,具有很强的跨平台性。
因其Log是一只狐狸,所以也称极狐
官网:GitLab
GitLab的作用?
主要作用和Github是一样的,都是用来托管代码的;主要区别是GitLab是开源的,安全性更高,Github是非开源的(不要误会,这里指的是Github本身,并没有说它上面的项目),所以很多大公司都会选择GitLab搭建公司内部的Git远程库
……
如果觉得本文对你有所帮助,欢迎点赞👍、评论✍、收藏⭐
参考文章:
- “快照”与“备份”的区别 - 知乎 (zhihu.com)
- 全面认识快照(Snapshot)技术 - 知乎 (zhihu.com)
- 软件、系统和平台区别? - 知乎 (zhihu.com)
- Git入门教程,详解Git文件的四大状态 - 知乎 (zhihu.com)
- 什么是分支?【分支 (branch)】| 猴子都能懂的GIT入门| 贝格乐(Backlog)
- 从零到百亿美金之路 | 胡涂说 (hutusi.com):该文讲述了Github和GitLab的前世今生(推荐阅读)
- GitHub 访问速度慢怎么办? 9 种方案帮你提速-阿里云开发者社区 (aliyun.com)
- 一分钟解决Github连接慢或者无法连接,亲测有效! - 腾讯云开发者社区-腾讯云 (tencent.com):冰河大佬最新教程,亲测有效
- Github加速的10种方式
- 如何提高国内访问GitHub的速度达到3MB/S以上(两分钟轻松解决) - 掘金 (juejin.cn)
- 密钥SSH免密登录(详解)
- Gitlab和Github哪个好?Gitlab和Github区别 - 美国主机侦探 (idcspy.com)