Git与Github基本操作

前提是你 提交于 2020-01-01 21:19:40

Git与Github

Git

git是一个版本管理控制系统(VCS),它可以在任何时间点,将文档的状态作为更新记录保存起来,也可以在任何时间点。将更新记录恢复回来。

基本工作流程

3.git仓库:用于存放提交记录

2.暂存区:临时存放被修改文件

1.工作目录:被git管理的项目目录

先通过工作目录提交到暂存区,再将暂存区的文件提交到git仓库

命令

#基本操作

#查看git版本

git --version

#git 的配置

git config --global user.name #配置提交人姓名

git config --global user.email #配置提交人的邮箱地址

git config --list #配置查看git配置信息

#git的提交步骤

先创建一个项目文件夹,切换到项目文件夹下,打开git

git init #初始化git仓库

git status #查看文件状态

git add 文件列表 #添加被git管理的文件到暂存区

git commit -m 提交记录 #向仓库中提交代码

git log #查看提交记录

#git的撤销

git checkout 文件 #用暂存区中的文件覆盖工作目录中的文件

git rm --cached 文件 #将文件从暂存区中删除,删除不希望被git管理的文件

git rest --hard commitID #将git仓库中指定的更新记录恢复出来,并且覆盖暂存区和工作目录

#分支

当前工作目录中代码的一份副本

使用分支,可以让我们从开发主线上分离出来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gaLxaogn-1577863665201)(/home/lxl/Pictures/Selection_105.png)]

主分支 (master) :主分支,第一次向git仓库中提交更新记录时产生的一个分支

开发分支(develop):作为开发的分支,基于master分支创建

功能分支(feature):作为开发具体功能的分支,基于开发分支的创建

git branch #查看当前的分支

git branch 分支名称 #创建分支,基于当前所在分支创建副本

git checkout 分支名称 #切换分支

git merge 来源分支 #合并分支,当前分支与来源分支合并

git branch -d 分支名称 #删除分支(-D为强制删除,当该分支没有被合并过时,想要删除应该使用-D)

暂时保存更改

场景:当前分支的功能还未开发完成,但是需要切换到其他分支去操作。分支临时切换。

git stash #存储临时改动

git stash pop #恢复改动

Github

多人同时协作开发

github为我们提供远程仓库的功能

多人协作开发流程

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Md3MopWo-1577863665203)(/home/lxl/Pictures/Selection_106.png)]
  • A在自己的计算机中创建本地仓库
  • A在github中创建远程仓库
  • A将本地仓库推送到远程仓库
  • B克隆远程仓库到本地进行开发
  • B将本地仓库中开发的内容推送到远程仓库
  • A将远程仓库中的最新内容拉去到本地
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TyyLAN8L-1577863665205)(/home/lxl/Pictures/Selection_107.png)]

git与远程仓库的使用

git push 远程仓库地址 分支名称

git push 远程仓库地址别名 分支名称

git push -u 远程仓库地址别名 分支名称(-u 是记住推送地址及分支,下次推送只需要输入 git push 即可)

git remote add 远程仓库地址别名 远程仓库地址

实际操作

git push https://github.com/lxllxl233/git-test.git master #从远程仓库中拉取分支

git pull https://github.com/lxllxl233/git-test.git master --allow-unrelated-histories #从远程拉取,允许不一致

如我在Github新建一个仓库,写了License,然后把本地一个写了很久仓库上传。这时会发现 github 的仓库和本地的没有一个共同的 commit 所以 git 不让提交,认为是写错了 origin ,如果开发者确定是这个 origin 就可以使用 --allow-unrelated-histories 告诉 git 自己确定

遇到无法提交的问题,一般先pull 也就是使用 git pull origin master 这里的 origin 就是仓库,而 master 就是需要上传的分支,因为两个仓库不同,发现 git 输出 refusing to merge unrelated histories 无法 pull 内容

因为他们是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,在 git pull 之后,这句代码是在git 2.9.2版本发生的,最新的版本需要添加 --allow-unrelated-histories 告诉 git 允许不相关历史合并

总结:如果提交失败的话可能是没有提交到本地仓库: git commit -m 提交说明

git remote add origin(自定义的,可以写其他的名字) 远程仓库地址 #为远程仓库添加别名

git push -u 提交地址 分支名称

=上面是仓库所有者的操作===

克隆仓库

git clone 仓库地址 #克隆远程仓库到本地

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gvIJZ3v7-1577863665206)(/home/lxl/Pictures/Selection_108.png)]
在这里插入图片描述
执行完上述操作就会出现一个邀请链接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-exG3BMXD-1577863665207)(/home/lxl/Pictures/Selection_109.png)]
在这里插入图片描述
复制这个邀请链接给其他程序员

其他程序员登陆后接受邀请即可

邀请其他程序员共同开发项目的流程如上图

冲突的解决

在多人同时开发一个项目时,如果俩个人修改了同一个文件的同一个地方,就会出现冲突。

远程版本高于本地版本,先把远程版本拉取到本地,然后再修改冲突的文件,最后再提交到远程仓库。

=====================

若本人不是项目的开发团队的成员

先 fork 项目添加到自己的github账号中,然后克隆远程仓库(自己的),修改项目后提交到远程仓库。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3bfXCymK-1577863665209)(/home/lxl/Pictures/Selection_110.png)]
在这里插入图片描述
提交后点击 pull request 链接提交给原仓库的所有者

仓库所有者审核后即可

========================
在这里插入图片描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VWwUTk55-1577863665210)(/home/lxl/Pictures/Selection_111.png)]

仓库所有者点击绿色和 Merge pull request 按钮即可

ssh免登录

开发者生成公钥(锁)和私钥(钥匙),公钥是放在github账户中,私钥放在本地。

ssh-keygen #生成公钥和私钥
在这里插入图片描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b4WOYYWJ-1577863665211)(/home/lxl/Pictures/Selection_112.png)]

会在当前用户的家目录的 .ssh 文件夹下生成公钥和私钥

其中 id_rsa 是私钥,rd_rsa_pub 是公钥

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4vIYrpyR-1577863665212)(/home/lxl/Pictures/Selection_113.png)]

在 github 这里添加公钥

ssh 免密提交测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cYUXS8hY-1577863665212)(/home/lxl/Pictures/Selection_114.png)]

在这里插入图片描述[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7OjmtL4m-1577863665213)(/home/lxl/Pictures/Selection_115.png)]

git忽略清单

告诉 git 哪些文件不需要给 git 管理

创建一个文件 .geiignore ,在该文件里写上不想被 git 管理的文件和文件夹名称。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!