git&github新手进阶篇

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_42681866/article/details/82917637

前提

  上篇内容主要介绍了如何注册和托管项目到github上,而关于很多命令还未深入介绍,本篇主要是依托于上一篇,针对github其他git命令的介绍,如果你是刚接触github不久的,那本篇内容很适合你,先附上上一篇链接:git&github简单上手教程

clone和pull

  我们知道,github其中一个最大的优势就是可以多人共同开发,包括代码、写作等等,那别人如何依据你现在的进度进行二次开发呢?这时clone和pull就登场了,上篇内容最后是上传了demo项目到github上,其中只有一个文件test.py,其中的内容是a=1(如下图):
在这里插入图片描述
  假如现在我是另一个人进行开发,那我肯定要下载该项目到我的电脑上,然后再进行更新修改,此时可以使用clone和download下载(如下图),download顾名思义就是下载成zip格式到电脑,这种一般是我们在浏览github上一些大神的项目很感兴趣,就可以下载到本地"膜拜";那我们要进行二次开发的话,最好用clone,因为clone的同时,相当于在你本地进行了git init,成了本地仓库。
在这里插入图片描述
  话不多说,我在桌面重建文件夹index,复制上图clone with SSH里面的代码,将项目拷贝到本地:

mkdir index(新建index文件夹)
git clone [email protected]:sandwu/demo.git(拷贝项目到本地)

在这里插入图片描述
  如上图所示,则表示clone成功,此时我们进入demo文件夹,按command+shift+.(Mac命令)查看隐藏文件,这时.git文件夹就出来了,表明此时已经是git init了。
在这里插入图片描述
  那pull有什么用呢?简单的说就是把本地仓库实时更新,也就是git pull把远程仓库实时拉回本地进行更新。假如你刚clone下来demo项目,准备给test.py新增内容:b = 2,而此时你的伙伴却又再次更新并上传了他的项目,test.py内容从a = 1变为a=1,b=1,那就跟新增的内容冲突了,此时就用到pull,那么本地仓库的test.py就变成了a=1,b=1。

.gitignore指定文件不上传

  上篇文章文件夹里有.DS_Store这个Mac自身携带的文件,那我们不想让无关文件提交到github该怎么办呢?很简单,新建一个文件命名.gitignore,将无关文件的文件名放到.gitignore,这边举例(由于clone的原因该项目没有.DS_Store),新建test1.py,然后不让该文件提交:
在这里插入图片描述
  此时查看git status,test1.py成功进入到工作区;再用vi新建.gitignore文件,文件中输入test1.py,此时再查看git status如下:
在这里插入图片描述
在这里插入图片描述
  发现test1.py已经不在工作区了,并且后续对其的修改也不会影响到工作区,那此时我们把.gitignore提交到github上:

git add . (.表示工作区全部文件的意思,此时工作区只有一个文件)
git commit -m “add .gitignore” (-m来描述此次提交的主要内容是增加.gitignore文件)
git push origin master (提交到远程仓库主分支master)

在这里插入图片描述
  此时查看github,发现test1.py成功未提交,并且多了一个.ignore的文件:
在这里插入图片描述

注意

  .gitignore只会增对未上传到github上的文件进行变更(即还在本地仓库区的),所以建议在项目创建的时候就创建该文件;那假如你要变更github上的文件,就需要执行以下命令:

git rm -r --cached . (最后有个. 表示清除所有的缓存)
git add .
git commit -m ‘update .gitignore’ (这里命名为更新.gitignore文件)

README.md描述项目

  我们一般会新建一个文件命为README.md来描述我们的项目,这是github上通用文件名,遵照就行,那就touch README.md新建文件,然后输入:This repository is used for study,来介绍该项目,然后上传到github上:

git add .
git commit -m “add_README.md”
git push origin master

  github上刷新下,发现文件已经在github上了:
在这里插入图片描述
  看到这里应该发现了,实际上上述两个文件在github上创建一个项目的时候就有提示是否创建(如下图),另一个add license就是新增license文件,指定证书,这个用不上,就不举例说明了。
在这里插入图片描述

git log && git reflog

  如果要看历史版本和提交记录怎么办?可以用log来看,git log可以得到每次提交的记录(包括你和其他小伙伴的都看得到):
在这里插入图片描述
  有没有觉得显示的很多?目前只有三条还可以,但是一旦几十次提交,那怎么看?使用git reflog可以只查看版本号和提交描述:
在这里插入图片描述

版本回滚

  通过git reflog和git log可以看到以往记录,那如果我想用之前的版本怎么办?使用git 回滚,执行git reset --hard HEAD^(回到上一个版本):

git reset --hard HEAD^

在这里插入图片描述
  此时会显示HEAD is now at 5fe01ca add .gitignore,这是什么意思呢?HEAD在git里表示当前版本,那这里就是指明当前版本是位于版本号5fe01ca;
  关于git reset --hard HEAD^这条命令,用HEAD^表示当前版本的上一个版本,HEAD^^表示上上个版本,以此类推,那假如版本几十个,就可以通过指定版本号来回退,如下命令:

git reset --hard d45a08f(回到第一个版本)
git reset --hard 6e02a9d(回到原版本)

在这里插入图片描述

对比当前版本和工作区

  我们经常修改一个文件并准备上传前,可能需要对比下和当前版本相比都增加了什么,来确定是否都修改到位了,这时git diff这条强大的命令就出场了,这边先给test.py增加一些内容:a1 = 10, a2 = 100;然后保存,此时test.py就位于工作区,那我们准备commit&push前,就来看下和当前版本有什么区别把!

git diff HEAD – test.py

在这里插入图片描述
  那到这里我们再提交下:

git add .
git commit -m “add_a1a2”

如何撤销工作区、暂存区、仓库区代码

  这边记住以下两点:

  • 只能撤销工作区、暂存区的代码,不能撤销仓库区的代码
  • 撤销仓库区的代码就相当于回退版本操作
撤销工作区代码

  我们给test.py再增加a3 = 1000,保存后就位于工作区,此时撤销刚刚的命令就用git checkout test.py(文件名)

vi test.py(使用vi命令增加a3=1000)
git status (查看test.py位于工作区)
git checkout test.py (撤销工作区的test.py)
cat test.py (查看test.py发现添加的a3消失了)
git status (再次查看状态,发现工作区也没有test.py了)

在这里插入图片描述

撤销暂存区代码

  还是上一个例子,我们给test.py增加a3,并提交到暂存区,利用**git reset HEAD test.py(文件名)撤销暂存区(命令理解过来就是重置当前版本的test.py),再利用git checkout test.py(文件名)**撤销工作区文件:

vi test.py (vi编辑器增加a3)
cat test.py (查看是否添加成功)
git add . (提交到暂存区)
git status (查看是否提交成功)
git reset HEAD test.py (撤销暂存区)
git checkout test (撤销工作区)

在这里插入图片描述

撤销仓库区代码

  这个就利用上面所说的回滚版本即ok

分支的概念

  分支也是多人开发的重要组成,当项目出现新bug或者需要开发新功能而又不能影响主进程的开发时,就需要单独建一个分支来完成,等分支完成后再合并分支就ok了。细心的朋友一定发现,push的时候都是push origin master,这就是推送到远程的主分支,默认master为主分支,那如何看当前的分支呢?

git branch

在这里插入图片描述
  可以看到当前只有一个分支,也就是git分配给我们的主分支master;那我们建一个分支dev:

git checkout -b dev(分支名字)

在这里插入图片描述
  可以看到当前分支已切换到dev了,那此时我们修改test.py文件,增加a3=1000,然后push到远程分支,此时要记得push命令对象一定要选为dev,具体操作如下:

vi test.py(修改test.py,增加a3)
git add .
git commit -m “add_a3” (描述此次操作是给文件增加了a3)
git push origin dev (推送到远程分支dev,要选中dev)

在这里插入图片描述
  此时登录github,发现在master上方多了一个dev分支,具体如下,并且master的test.py没有a3,而dev的分支有a3:
在这里插入图片描述

合并分支

  那假如说,此时我分支已经开发好,要将分支的内容合并到主分支,该怎么操作呢?很简单:

git checkout master (用checkout来切换分支,此时切换回主分支)
git merge dev (merge合并的意思,即合并dev到我master分支上)
git push origin master(合并完后直接推送到主分支就行了)

在这里插入图片描述
  查看github上的master是否成功合并
在这里插入图片描述

标签(版本)的概念

  讲完分支很有必要来介绍标签(tag)的意义,当我们完成一个很大的项目时,需要分阶段打标签(每打一个标签,相当于定义一个版本),有利于查找之前的版本以及切换到之前的版本,相当于小修改就用版本回滚(commit reset --hard HEAD^)来实现,大的版本回滚,就依赖于标签了。
  就当前这个例子,当我在test.py里写完a1/a2/a3后,我觉得我这个版本已经开发ok了,那我就打一个标签(命令是git tag -a 标签名 -m 标签描述),并提交到github:

git tag -a “v1.0” -m “version 1.0” (定义当前版本v1.0,描述则是version 1.0)
git push origin v1.0 (标签名)

在这里插入图片描述
  那登上github查看结果如下:
在这里插入图片描述
  分支和标签都是为了开发大项目时使用的,关于两者,要注意的就是推送到远程仓库时,一定要把对象改成对应的分支名/标签名;那这边再说下如何删除标签:

git tag -d 标签名 (删除本地标签)
git push origin --delete tag (删除远程仓库标签)

总结

  至此github&git基本教程完毕,至于pull request/issue等等待后续有空再介绍,新手基本掌握了这两篇文章的命令就暂时够用了,如有疑问可以在评论区探讨~

猜你喜欢

转载自blog.csdn.net/weixin_42681866/article/details/82917637