赞
踩
请勿复制或者抄袭或者发表本文的部分或者全部内容
前言
什么是Git/GitHub?
下载Git
GitHub注册
git的基本操作(版本管理)
分支/branch(合作开发)
项目的开发流程规则(Git Flow/GitHub Flow)!!!!
GitHub
SHA-1码
后言/叠甲
本文是一个简单介绍Git的使用方法的文章。目的是帮助各位大学生对Git和GitHub有一个简单的入门了解。从而达到用Git来对自己项目的版本有序控制与更新,甚至用GitHub实现多人共同开发。
其实早有一些软件可以实现可视化操作,可以更简单的实现Git的操作。但是基础操作更能让我们理解Git的基层,让我们理解更加深刻,打好结实的基础。但是不是说不建议学习可视化操作软件。相反,我还希望大家在学习了基础操作后去认真学习一下。
用专业的语言来说:“Git是一款分布式版本的版本控制系统”,是一个软件。而GitHub是一个网站,其本体是一个巨大的服务器(线上Git服务器)。
按我的理解来说,git有俩个功能,一个是版本管理,另一个是合作开发。
在这个网站上可以通过按钮简单的操作,就能实现比较复杂的Git操作。同时也可以分享一些不错的项目。同时,他也是非常棒的开发者履历平台。当然,你同样可以找一些优质项目借鉴一下子。
(~ ̄▽ ̄)~
还有一件事~(老爹音):
值得一提的是,GitHub网站项目的借鉴可以不用注册账号,甚至不用学会git,直接下载压缩包。对小白非常的友好。当然这样干的话也会丢失项目之前的存档,或者说是历史记录。
想要用Git来管理你的项目,那当然得先把git下载下来呀。但是git的下载这里不多介绍,给大家推一篇csdn博客指路。讲的也是非常详细的。
csdn博客链接在此
注册的话相信对于各位混迹于互联网多年的“分号斗罗”简简单单。此处附上GitHub官网。
GitHub官网
GitHub注册,当你想用GitHub网站共同开发项目或者分享你自己的项目的时候,就需要像一个博客一样注册一个自己的账号啦。
但是由于GitHub这个网站的服务器是在国外,所以在访问GitHub这个网站的时候可能就需要老爹的魔法啦。
当然,也有其他的方法,这里同样这里也不多叙述,提供一个比较简单的方法。
( ̄▽ ̄)*
csdn博客链接:GitHub链接不上的简单方法
那么那么,接下来就开始介绍git的基础操作,也就是版本管理部分啦。
各位看官,你细听分说~
在讲Git的基操之前,首先应该说明的,git的大致区域划分以方便大家理解下面的指令。
首先,Git分为三个区间:
工作区/工作目录(Working Direcfory);
暂存区(Staging);
存储区(Reposifory)
工作区/工作目录(Working Direcfory)
暂存区(Staging)
存储区(Reposifory)
Git的存档操作就是在这三个区间完成的,在大概理解了这三个区间后就可以开始具体指令的学习啦。
Windows | Linux/macOS | 说明 |
---|---|---|
cd | cd | 切换目录 |
cd | pwd | 获取当前所在位置 |
dir | ls | 列出当前所在的文件列表 |
mkdir | mkdir | 创建新的目录(文件夹) |
无 | touch | 创建文件 |
copy | cp | 复制文件 |
move | mv | 移动文件 |
del | rm | 删除文件 |
cls | clear | 清除上面内容 |
其中大部分都拿鼠标来的快,但是clear指令可以帮助你在你的git bash很乱的时候清空一下命令行就不用重启git bash了,可以节省很多时间是一个应当掌握的指令。
但是如果你要是想在人前显圣的话就可以偷偷练一下之后在假装不经意间用出来。
同学:Σ(っ °Д °;)っ????????
想让Git做你项目的版本管理器,就必须先让Git接管你的项目,也就是先完成入班仪式。这时候你就该在你打开的git bash指令框里面输入:
git init
这时,你的根目录里面的内容就会全部被Git所管理,其实悄悄的出现了一个.git文件夹(默认.开头的文件是隐藏状态,如果要找倒他只需要在文件夹最上面点查看,把"隐藏的项目"勾上即可)。Git的操作全在里面实现。
如果你不希望Git管控这个项目,只需要把.git文件夹删除即可,但之前的版本记录会全部丢失,不可找回。
如果你有某些文件不想让Git管理,或者一些机密文件(如数据库的存取密码,服务器密匙)不适合上传。也有办法:
ok,现在你的项目已经有git来开始守护了。要想保存存档,你需要做俩步,git add与git commit。现在我们将工作区的文件放到暂存区里。 在git bash里接着输入:
git add --a
git add --a
等价于 git add --all
等价于 git add *
如果你在git add之后,又改动了文件,那么应该再次向暂存区提交一次。
当然也可以只交部分内容,把–a换成文件全称即可。但是兄弟你记住,你可以没事找事,但别一直找事,直接都commit就完了。
~( ̄▽ ̄~)(~ ̄▽ ̄)~
git add .
与git add --a
他们并不等价,区别如下
Git 2.X 版本之前:
使用参数 | 删除的文件 | 提交内容 |
---|---|---|
–all | 可更改 | 根目录下所有内容 |
. | 不可更改 | 当前路径下的所有内容 |
Git 2.X 版本之后:
使用参数 | 删除的文件 | 提交内容 |
---|---|---|
–all | 可更改 | 根目录下所有内容 |
. | 可更改 | 当前路径下的所有内容 |
你可以输入git status来查看你文件的状态,以便你来理解,简单介绍一下。
在git bash里接着输入:
git status
Changes to be committed
:表示已经从工作区add到暂存区的文件Changes not staged for commit
:表示工作区,暂时区都存在的文件Untracked files
:表示只在工作区有的文件both modified
:合并时有冲突的文件在我们向暂存区提交完之后,就该向存储区交作业了。
在git bash里接着输入:
git add -m "啦啦啦"
如果觉的先add再commit有脱了裤子放屁的嫌疑。那么在前面加一个-a即可偷懒。o( ̄▽ ̄)o
在git bash里输入:
git add -a -m "啦啦啦"
在啦啦啦里面是写本次提交的注释的地方,你应当明确告诉自己或者其他人这次改动了嘛。尽量客观,别“我改了给bug”,谁也不知道你动那了。也别写个800字小作文。简洁明了的说就行,比如"#01 bug fixed"。中文英文都行,但英语显的咱逼格高。
(~ ̄▽ ̄)~
有些人说那为什么Git这样麻烦呀,直接commit不就完了吗。其实,commit是往存档里面存的,是会被记录的。打游戏不可能走一步记录一下,同样敲代码也一样。如果你commit太多code review的时候就不好查了,如果commit的比较有规律的话,就比较舒服了。
什么时候commit:
既然是存档,那就应该有回档功能吧。但回档得先查查咱要回哪个档吧。
在git bash里接着输入:
git log
git log --oneline
git log --oneline --graph
git log --oneline --auther="绣花锤头\|擎天尊"
git log --oneline --grep="偷懒"
git log --oneline -S "偷懒"
git log --since="10am" --until="10pm" --after="2023-08"
git log 文件名 -p
在查完历史版本之后,接下来要做的就是读取存档了。
在git bash里接着输入:
git checkout HEAD^
git checkout e16c8af
:表示回到’e16c8af’这个版本。但是会出现’detachde HEAD’,你问我具体为啥?往后看!git checkout HEAD~2
:回到前俩个版本在单人开发项目的时候,当然一条分支就行,也是没什么问题的。但是要是越来越多的人投入开发的话,就不能那么随意的commit了。这时候分支就派上用场了。
总而言之,分支像一棵树的枝条,有他的主干(爹)。分支的目的是让一个项目的发展方向不受约束,可以多人共同开发,最后的使命都要合并在一起。
具体来讲,分支就像一个指针,指向一个commit。默认的指针是’master(main)'。当做了一次新的commit的时候,这个新的commit会指向前一个旧的commit,而指针在不干涉情况下会永远指向最新的commit。
形象化来说,每次的向一个有名字的路标,这个默认叫’master(main)'的路标指向项目的主线任务(commit),避免玩家迷路找不到位置。
当有支线任务时,你可以用其他路标(分支)指向支线任务。而支线任务的目的是对项目或者主线任务有一定的推进。所以支线任务最后还是要与主线任务合并的。
使用分支前首先我们先看看我们现在的默认分支。
在git bash里接着输入:
git branch
现在我们就看到了我们拥有的分支,目前来说,我们只拥有默认分支,也就是’master(main)'分支。这个分支只是初始分支,叫’master(main)'罢了,没有什么特殊的含义,如果你想,甚至可以改掉名字。这个我们后面会提到。
如果想新增加一个分支,可以在查看分支指令的’branch’后面加上分支的名字。这样我们就新增加了一个分支。如果我们想增加一个dog分支:
在git bash里接着输入:
git branch dog
这样我们再次输入’git branch’就可以来查看现在的分支情况了。
git checkout 23d56a3
git branch -b dog
git branch dog 23d56a3
某游戏商店的改名卡着实惹人不爽。当然,如果想在Git里面改分支的名字是不需要改名卡的。
o( ̄︶ ̄)o
在git bash里接着输入:
git branch -m master(main) cat
即可将’master(main)‘分支的名字改为’cat’,同理,其他的分支也可以改。
当你们看某人不爽的时候,删微信之前可能会犹豫一下。
当你们看某个分支更不爽时,别犹豫,直接删。
o( ̄ε ̄*)o
在git bash里接着输入:
git branch -d dog
这样就把狗东西('dog’分支)删掉了。
在查完历史版本之后,接下来要做的就是读取存档了。
在git bash里接着输入:
git checkout HEAD^
Σ( ° △ °|||) ︴ 哎等等。不对,这集我看过!
emmm,神父,换碟!
各位少侠好眼力。
git checkout HEAD^
确实是切换到上一个版本。这里的切换分支与上面提到的git checkout (切换版本)师出同门,都是用的
git checkout
只不过要在后面跟上分支的名字。如:切换到dog分支:
在git bash里接着输入:
git checkout dog
再用’git branch’查看,就能看到分支状态的不同了。
欧克,合并分支无非就是俩种情况。
那么开始合并,首先你得先确定你所处的位置。如:现在在’master(main)‘分支,另一个分支为’dog’。
在git bash里接着输入:
git merge dog
先说’没冲突’的情况,这时候,就会顺利合并,'master(main)‘分支会直接指向’dog’
--no-ff
即可。如:git merge dog --no-ff
再说有冲突的情况:
git checkout --ours apple.jpg
:使用’dog’的’apple.jpg’git checkout --theirs apple.jpg
:使用’cat’的’apple.jpg’没啥好说的,就是悔婚。其实本质是删除最后一次commit。
在git bash里接着输入:
git reset HEAD^ --hard
其实这是另一种分支合并的形式,因为合并形式很像剪贴,所以我个人戏称之为分支剪贴。
顾名思义,这种合并形式就像把左胳膊砍了接在右手上。但是左手并不是直接被删了,更像是剪贴,只是没指针指向他,逐渐被遗忘,直到某一天被删除。
还是我们的老朋友,有俩个master(main)的“子分支”,我们要将’cat’合并到’dog’分支。
在git bash里接着输入:
git rebase dog
git reset HEAD^ --hard
的本质是删除最后一次commit,故这里不适用。这里使用:git reset ORIG_HEAD --hard
ok,到这里,大家应该都对分支有了一个简单的认识。我这里再向大家区分一下’HEAD’和’master(main)'的区别。
git checkout 25a36e1
其实开发流程规则是合作开发项目时非常重要的,有很多人忽略了这一点,导致在合作完成项目的时候非常乱。
我在一开始使用Git的时候就因为没合理的规则,就导致项目非常乱,甚至放弃了使用Git。遵守规则能很好的减少这些问题带来的影响。
时至今日,我依然感觉这个开发流程规则太需要重视了,为了避免小伙伴重蹈我的覆辙,所以我开了单章介绍一下。
Git Folw
Master(main) 分支:主干分支,也就是完整上线版本1.0,2.0之类的。切记不要commit到这个分支上
Feature 分支:功能分支,用于开发功能,其对应的是开发环境。
Develop 分支:开发分支。所有开发分支的爹,所有的功能开发(Feature 分支)都需要从这里划出去。而一旦(Feature 分支)功能开发完成,就必须要向 Develop 分支合并,合并完成后,删除功能分支。
Release 分支:上线前测试。当Develop 分支测试足够成熟时,开出一个 Release 分支来,然后做发布前的准备工作。这个分支对应的是预发环境。
Hotfix 分支:是用于处理生产线上代码的紧急发生的bug,每个线上代码的紧急 bug 都需要开一个 Hotfix 分支,完成后,向 Develop 分支和 Master(main) 分支上合并。合并完成后,删除 Hotfix 分支。
GitHub Flow
GitHub Flow在GitHub官网里面有详细说明。
详见GitHub官方GitHub Flow说明
或者CSDN博客GitHub Flow说明
我们前面简单的介绍了GitHub,大家应该都有了一个简单的印象。上面的指令就可以让你在你的本地中简单的使用Git来完成你的版本管理工作了。而下面的则是让你的本地仓库和远程仓库相互交流的指令。
想要将本地库和远程库交互,则应该先有一个远程仓库。
creat a new repository on the command line
提示操作;push an existing repository from the command line
提示操作;接下来就是git push了,在操作提示中我们也能看到git push的痕迹。对,其实在完成操作提示的时候我们已经push了一次了。那么我们仔细说说。
在git bash里接着输入:
git push
git push -u origin master
,其中,-u(-upstream)是把origin设置成为了master(main)的远端节点,他会指向并跟踪master(main)。通常远端节点是远端的分支,但是设置本地也可以。git push origin master(main)
git push origin master(main):dog
git push -f
:强推(覆盖他人的push)首先应该说明的是:
git pull = git fetch + git merge
其次大家不用记,git fetch和git merge,可以装作没看见。单纯的显摆一下子罢了。
ヾ(≧▽≦*)o
那么,与git push相对的就是git pull了。
在git bash里接着输入:
git pull
如果在GitHub上看到了不错的项目,还想把它历史记录和之前的版本也借鉴过来。好,请使用git clone
git clone xxxx
git remote -v
:获取项目信息git remote add upstream HTTPXXXXXXX
或git remote add dummy-kao HTTPXXXXXXX
:git fetch upstream
或 git fetch dummy-kao
SHA-1码也就是Sercure Hash Algorithm 1 。他是一种凑值算法,可以理解为通过固定算法压缩为固定长度(40个16进制)的码。这种码在给定内容一样的情况下,会输出同样的数,而在内容不一样的情况下重复的概率很小。我们所知的commit的乱码就是SHA-1码的前七位,这是git用前7位代替他整个SHA-1码。
咱们之前提到,有四种重要的比较基础的,Blob对象,Tree对象,Commit对象,以及Tag对象。
Git/GitHub易入门难精通,上面提到的都是入门阶段的,对于我们基本开发已经足够使用。
Git/GitHub的还有很多的功能或者插件丰富多彩,更何况作者更新迅速,生态环境非常有生机。还有很多功能有待开发学习。
推荐学习可视化操作软件。可以很好的帮助Git项目处理。
本文是作者学习一段时间Git后的总结或者分享,再闲暇之余帮助各位同学大概了解一下,并不用做商业用途。
本文是作者个人整理,难免有些地方理解不正确或者不到位。欢迎各位指正(作者:绣花锤头,邮箱:A2356360027@163.com)
请勿复制或者抄袭或者发表本文的部分或者全部内容
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。