仅用于教学,文中有使用到外部网站的文章都有附上参考连结,若有疑问请来信告知 email:nickchen1998@gmail.com
一、如何建立 Git 专案
以下分别针对从头建立专案以及建立一个已经有使用 Git 的专案这两种情况进行说明
(一)、从头建立专案
情境:该专案并没有使用过 Git 进行版本控制过,包含从 0 开始的专案或是已经有开发到一半的专案
demo 流程:
实作:
打开 terminal 利用 mkdir 指令建立目录
利用 dir 指令确认目录有被建立成功 (linux base 请使用 ls)
利用 cd 切换到该目录
于该目录下运行 git init
指令
打开该资料夹查看是否有 .git 目录 (linux base 可使用 ls -al 查看)
(二)、建立一个已经有使用 Git 的专案
情境:你需要加入别人开发到一半的专案,或是想从 GitHub or GitLab 上複製别人的专案下来使用或开发时
语法:git clone <网址 or 档案位置> <複製过去的目录名称 (预设为複製的专案 or 目录名称)>
demo 流程:
实作:
切换到 Desktopp 目录并 clone 一份名为 demo 的专案
将 clone 的专案命名为 demo_clone
确认 .git 目录是否存在
二、提交写好的程式码
情境:当你今天有对专案进行开发,想要将这个纪录提交到 git 进行版本控制时
demo 流程:
实作:
切换到一个有 git 的专案目录下
新增一个名为 demo.txt 的文字档
运行 git add .
将编辑后的东西加入 git 进行追蹤
运行 git status
查看目前专案状态,可以发现 git 已经有侦测到有一个新的档案叫做 demo.txt 但是还没有进行提交
运行 git commit -m <这个版本的简易描述>
进行版本提交
运行 git log
查看是否提交成功,若有成功会于 log 内提示
三、回到某个版本
情境:当你今天把你的程式码改烂了,需要回到上一个版本,或是今天系统更新后出现问题,需要马上切换到之前某个正常版本时
demo 流程:
实作:
先利用第二点说明的提交方式,再新增一个文字档并提交
运行 git log
查看想要回到哪个版本的版本号码,这边假设想回到注解为 "新增文字档" 这个纪录
複製该版本号码
运行 git reset --hard <版本号码>
,进行回复
运行 git log
检查提交纪录是否回到指定的地方
四、何谓分支 (Branch)
(一)、定义与简介
一般来说,分支粗略分为五种,分别为 master、hotfix、release、develope 以及 feature,下面分别进行介绍
master:专案的主要分支,于其他种类的分支进行开发后,最终都会 merge 到此分支上,于正式环境上部属的专案通常都会使用此分支,每个 git 专案预设都会有一个名为 master 的分支
hotfix:当今天位于 master 的专案突然出现了一个错误,需要紧急修正时,会建立一个分支来做紧急处理,此分支必须优先处理
release:专案开发中,每个版本都会建立一个分支,通常会部属在正式环境用于测试将 develope 以及 feature 合併后确认专案是否有问题,若没有问题则会在做完测试后,merge 到 master 分支上
develope:为针对 release 分支的专案需求切出来的大项目,例如:前端、后端
feature:针对 develope 每个细项功能所开出的分支,例如:后端功能当中的登入、登出,都可以个别开出一个细小的分支
当然根据公司或是需求不同,不一定会将分支开的这么细,不过通常最少都会有 master、hotfix 以及 release 这三个比较大方向的分支
(二)、分支图
注:分支只是一种概念,是人订出来的,对于 git 来说就只是一个分支,并没有所谓建立 hotfix 分之这种事,下方图片简单介绍了一下后人归纳出的五种类型的分支,并各自会于什么时候合併到哪里
图片参考位址:https://expressus.io/uploads/beautiful-gitflow-workflow-diagram.png
(三)、分支的操作
git branch
确认目前所在分支,终端机会印出所有分支并在目前所在的分支名称前加上星号
git branch <分支名称>
若在上述的指令后面加上一个分支名称,则会依照此名称建立一个分支
可以看到下图当中我们利用 git branch demo
建立一个名为 demo 的分支,并利用 git branch
查看所有分支
git checkout <分支名称>
可以利用此指令进行分支的切换
下途中我们利用 git checkout demo
切换到 demo 这个分支,并利用 git branch
查看所有分支
五、何谓冲突
情境:当今天一份专案同时有超过一个人以上在编辑,难免会有两个人同时编辑到同一行程是码或是同个档案的问题,而如果要将这两份位于不同分支上的专案进行合併 (merge) 的话,就会造成冲突
demo 流程:
实作:
进入一个已经有使用 git 的专案
图片当中显示进入 demo 这个专案,并且该专案有 .git 资料夹以及 demo.txt 这个档案
利用 git branch demo
建立一个名为 demo 的分支
利用 git checkout demo
切换到 demo 分支上并利用 git branch
确认目前所在分支
在 demo 分支上针对 demo.txt 进行编辑并存档
进行 commit 提交
利用 git checkout master
切换到 demo 分支上并利用 git branch
确认目前所在分支
在 master 分支上针对 demo.txt 的同样一行的地方进行ㄅㄧ的地方进行编辑并存档
进行 commit 提交
在 master 分支上利用 git merge demo
将 demo 分支合併过来,系统会跳出发生冲突提示
在 master 分支上打开 demo.txt 可以看到内容如下
Git 会将有发生冲突的地方进行标示,HEAD 表示目前所在分支的内容, === 下方为合併过来的内容
整理想保留下来的内容 (解决冲突) 并存档
进行 commit 提交
说明:在解决冲突的过程当中,若你的专案是有两个人以上进行编辑,请务必和发生冲突的分支负责人进行讨论,看看该怎么样将档案进行合併,才不会误删别人的工作内容或是造成系统的错误
六、Push 程式码到云端
云端泛指可以使用 git 将程式码推上网路上的某处进行储存的地方,目前常用的有 GitHub、GitLab
将程式码推上云端的情况大约分为两种,一为云端储存库为新的,需要手动建立连线,另一个则为专案本身就是从云端上複製下来的,将利用 GitHub 针对此两种情况进行说明
(一)、全新的 GitHub 储存库
情境:假设今天在本地端有一个专案已经有用 git 进行版控了,想要将专案推上在 GitHub 的全新储存库时
demo 流程:
实作:
使用 terminal 开启一个已经有使用 git 的专案
複製 GitHub 专案网址
ex:https://github.com/nickchen1998/test.git
运行指令 git remote add <连线名称> <专案网址>
进行连线
连线名称可以自行命名,通常命名为 origin
运行指令 git remote -v
查看连线是否新增成功
运行指令 git push
进行推送
初次进行推送会提示需要进行一些设定,按照提示输入 git push --set-upstream origin master
往后要进行推送只需要使用 git push
下图可以看到第一次进行推送时需要按照提示进行输入
下图可以看到按照提示输入后即可正常进行推送
前往 GitHub 进行查看
(二)、从云端複製下来的专案
情境:假设今天你从云端複製一份专案下来,可以直接使用git remote -v
查看连线,会发现 git 会帮你直接建立好连线,后续有任何更动可以按照 git add .
> git commit -m "message"
> git push
这三个步骤即可进行推送(三)、注意事项
git push
指令预设会将所在分支推送到对应连线专案上的同个分支,由于连线数量可以不只一个,且分支通常也不会只有 master,这时候就可以透过更改 git push <连线名称> <分支名称>
来进行推送