面向新手的git实战教程

嗨!我是团子,大家好久不见呀~


记得之前在网上学习git相关知识时,看到的文章大部分都是讲解git的基本命令有哪些,用处是什么,但是自己真正上手使用git时,仍然无从下手。


所以今天就想从初始化一个git仓库开始,一边教大家实践git,一边讲解git的命令有哪些!


什么是git

在实践git之前,我们需要先理解一下什么是git。


请教了一下chatGPT,给出的答案如下图所示:

概括来说,Git是一种开源的分布式版本控制系统,可以跟踪文件的每一次修改,方便团队协作和软件开发。


git的工作区示意图如下所示,大家可以先有个印象,我们后面慢慢理解它~


安装及配置git

安装git

在了解了什么是git后,我们需要先确保自己的电脑上安装了git的全局环境,这样才能使用git来管理我们的代码。


安装git的途径有多种, 对于windows环境的用户,这里推荐去Git的官网:

https://git-scm.com/downloads下载自己的电脑系统对应的安装包,然后通过可视化界面进行安装。


Mac环境的用户推荐使用Homebrew进行安装,网上的安装教程有很多,大家可以去搜搜看~


当安装完毕后,在命令行中输入git --version,如果出现了git的版本号,则说明安装成功啦~



配置git

完成了git的安装后,我们还需要对git进行简单的配置才能进行正常的使用。


具体来说就是需要生成用户名、邮箱以及推拉代码需要的公钥和私钥


1.打开git bash窗口
2.配置git用户名

git config --global user.name "account name"

3.配置用户邮箱

git config --global user.email "account email"

4.生成公钥、秘钥(填自己的邮箱,执行后按几次enter直到结束)

ssh-keygen -t rsa -C "xxx@xx.com"

5.通过命令行或者文件夹找到 .ssh所在目录,拷贝公钥

// Mac
cd ~/.ssh (如果不在.ssh文件夹需要执行此步)
cat id_rsa.pub
// windows
默认在:C:\Users\xxx\.ssh\id_rsa.pub

6.将公钥添加到云端的代码托管平台,如:githubgiteegitlab等等,便于日后直接推拉代码。


至此就完成了git相关的配置!


git实战

接下来,我们就以协同开发一个前端算法仓库为例开始实战吧!

1.初始化代码仓库

初始化代码仓库有两种形式:

是在云端代码托管平台(本文以github为例)创建云端仓库,然后在本地空文件夹下执行:

git clone 远程项目的ssh地址

从而完成云端的项目初始化以及本地项目与远程仓库建立连接。


是在云端代码托管平台创建了云端仓库后,在本地一个空文件夹(项目文件夹,取名别用中文)下使用git init创建本地git仓库,然后使用下述命令来与远程仓库建立连接。

git remote add origin 远程项目的ssh地址

github代码托管平台为例,如果我们是项目的创建者,则需要在云端创建一个代码仓库供项目开发成员协作开发。


在我们点击Create repository按钮后,就会初始化一个空的云端仓库了。


因为此时的云仓库里啥都没有,github就会出一些提示来帮助远程仓库和本地仓库建立连接:

按照图中的说法,本地仓库和云端仓库建立连接有两种办法:

是本地空白项目文件夹下使用git init初始化本地仓库,并添加README.md文件,然后依次执行如下命令:

git add README.md // 添加项目说明文档至本地仓库缓存区
git commit -m 'first commit' // 使用commit将文档添加进本地仓库
git branch -m master // 本地生成一个master分支,用于后续项目开发

然后执行如下命令和远程仓库建立连接:

git remote add origin 远程项目地址

最后使用git push命令将本地更改同步到云端。

git push -u origin master

这里的 -u 参数的含义是在进行推送代码到远端分支,且之后希望持续向该远程分支推送时,可以在推送命令中添加 -u 参数,简化之后的推送命令输入。
这样以后执行git push就相当于执行git push origin master

是本地项目已经是初始化后的git项目时,直接执行下面三条命令即可和云端建立起连接:

git remote add origin 远程项目地址
git branch -m master 
git push -u origin master

与此同时,如果我们只是项目的开发者,并不是创建者的话,只需要在有项目开发权限情况下执行下述命令拉取远程仓库代码就行啦:

git clone git@github.com:dossweet/algorithm-practice.git

语法格式为:git clone (-b) (远程分支名) 项目地址。括号里的 -b 远程分支名用于克隆云端指定分支的代码,不加时默认为远程主分支代码。

2.协作开发

在团队协作开发中,项目成员一般会按照功能(feature)在本地创建分支(branch)进行开发,并在功能开发完毕后推送代码到云端仓库,然后等待相关人员review代码,确保代码质量无误后merge进项目主分支,然后在云端和本地删除无用的分支(可选)。


因为本文创建的只是一个案例项目,因此项目结构比较简单。


首先执行git branch命令查看本地项目分支:

因为前面我们只创建了一个master主分支,所以branch只有一个。


本地的master分支一般用作主分支来和远程主分支代码进行交互。因此我们需要先在本地创建一个新分支来编写具体的功能代码。


checkout指令用于切换分支,加上-b参数表明切换的分支需要新建。

git checkout -b sort-algorithm

然后执行git branch就可以发现本地有两个分支了,而且当前处于sort-algorithm分支。


接下来,我们在项目根目录下新建一个堆排序的js文件,并填充算法内容:


然后执行git status查看当前的仓库状态:

git status


发现文件都是红色,这表明我们编写的代码还没有录入本地。


除此之外,还多出了 .idea/ 文件,这是webstorm编辑器自带的配置文件,使用vscode编辑器会有 .vscode文件也是同理。


这种配置文件一般是不需要上传到云端代码仓库中的,因此我们需要在项目文件夹下生成 .gitignore 文件,来把不需要协作的文件放进去。


这样以后就再不会在git命令行中出现这个文件啦~


再次执行git status,发现 .idea/ 不见了,取而代之的是 .gitignore


然后执行git add . 操作把这两个文件放进本地的仓库暂存区中:

git add .

git add 文件名操作会把文件添加进本地的仓库暂存区,如果一次性想添加所有文件的话,可以直接用.来代替。


再次执行git status命令,就会发现文件变成了绿色,这表明文件已经到了本地git仓库暂存区。


接着我们执行git commit命令来把添加至本地暂存区的代码提交至本地项目仓库中。格式为:git commit -m “提交信息”

git commit -m "feat: 新增堆排序"


接着我们再执行git status命令查看文件状态,就会发现本地没有无状态的文件了,这表明所有的文件都已进入了本地代码仓库。

接着我们需要把本地完成的功能提交到云端。


通常来说,在项目开发中,我们需要在云端仓库中新建一个和本地分支命名相同的远程分支,然后本地分支完成当前功能后,将代码推送到远程同名分支,然后由项目负责人review代码,确认无误后将代码合并到远端主分支中。


因此我们需要先在远程分支中创建一个同名的分支:

然后在本地执行git push <远程主机名> <本地分支名>:<远程分支名> 将本地当前分支的代码推送到云端分支中。当本地分支与要推送的云端分支名相同时,可省略远程分支名。


我们执行下列代码:

git push origin sort-algorithm


然后云端仓库对应分支就会同步更新推送上来的分支代码为最近版本,同时出现是否pr(pull request)的提醒:

功能开发者可以自行选择是否提pr(pull request),如果功能开发完成,就可以提pr啦!


此时代码reviewer就会审查代码并给出意见。如果需要修改代码,就需要开发者本地修改后重新push;如果不需要修改,则reviewer可以merge当前pr到项目主分支。

当分支代码被merge后,本地和远程就可以选择删除sort-algorithm这个分支啦!
到此步,就完成了一次本地代码和远程代码的同步


然后在之后的每次新功能开发中,项目开发者需要先在本地执行git checkout <本地分支名> 切换到项目主分支master,执行git pull <远程主机名> <远程分支名> 获取云端仓库最新版本的代码。

git checkout master
git pull origin master


然后执行git checkout -b <本地分支名> 创建一个本地新分支继续开发新功能。或者执行git checkout <本地分支名> 在已有的分支上继续开发新功能!


以上就是我们项目开发中最常使用的一些基本命令啦!


汇总一下,大概包含如下一些指令:

git clone (-b) (远程分支名) 远程项目地址
git status
git branch
git branch -r //查看远程分支名
git branch -a //查看本地分支名+远程分支名
git branch -m <本地分支名> // 修改本地分支名
git branch -d <本地分支名> // 删除本地分支
git add <本地文件名>(全部文件时用.代替)
git commit -m "提交说明"
git push <远程主机名> <远程分支名>
git push -f <远程主机名> <远程分支名> // 强制推送,平常不推荐使用
git checkout -b <新分支名称>
git checkout <本地已有分支名称>
git pull <远程主机名> <远程分支名>
git remote add <远程主机名> <远程项目地址>
git log // 查看日志

除此之外,在项目开发中,还有一些高频进阶指令我们最好掌握:


进阶指令

1.合并操作

在多人协作开发过程中,合并操作是我们经常会遇到的一个场景。


关于合并操作,常用的两个git命令是mergerebase。关于什么时候用merge,什么时候用rebase,通过实践和总结,我得出来的结论如下:


当我们需要合并自己分支的代码项目公共分支上时,推荐使用merge指令。


因为merge指令会保留完整的commit记录,方便开发者溯源。


继续拿我们的模拟仓库来说,假设有两个开发者A、B克隆了远程主分支C1版本的代码在本地进行独立开发。


其中开发者A在本地没有创建自己的分支,直接在master分支上进行了开发,新增了一个堆排序,并提交了代码到云端主分支。

那么此时云端主分支的代码版本就变成了C2


此时,开发者B基于云端的C1分支,在本地新建了一个自己的分支dev进行开发,同时也是新增了冒泡排序这个文件。


那么在开发者B想要合并代码时,就需要借助merge操作了。


并且如果开发者B想直接merge代码到项目主分支的话,git会报错提示:当前主分支版本 (C1) 落后于远程主分支版本 (C2) ,此时我们需要先执行git pull命令,再在本地主分支上执行merge分支dev的操作,然后再推送到云端。


与此同时,因为开发者A和开发者B修改了同一个文件,那么在merge代码时就可能存在冲突问题需要解决。

代码中的冲突示意( 需要根据项目情况进行修改 ):

合并示意图如下所示:

当我们需要基于远程公共分支在本地自己的分支上进行开发时,推荐使用rebase指令 。


因为这会使我们的commit记录呈线性变化,非常清晰。


以模拟项目为例,我们本地新建了一个分支叫array-algorithm。并想在项目公共分支的基础上进行代码编写。那么此时就可以使用rebase操作,因为它会呈现出一条清晰的commit
image.png
其实rebase更准确的说法应该叫变基。


以我们的模拟项目为例,如果想要将基分支 (master) 修改到待变为基分支的array-algorithm分支上时,


就需要先执行checkout切换分支到master分支,然后执行git rebase操作,这样就会以array-algorithm的最新一次提交作为新的基底,并把master分支公共父节点之后的版本追加到新基底之后~

git checkout master
git rebase array-algorithm

2.回滚操作

在使用git进行协作开发时,回滚也是非常高频的操作之一了。


所谓回滚操作,指的是commit的代码版本有不正确之处,想要回退代码。


关于回滚操作,git中有两条指令可以实现:resetrevert。相比于reset指令来说,更推荐使用revert指令。


reset指令


reset指令指的是让代码回滚到之前的某次commit版本,同时清除这条commit之后的所有新commit。


如果开发者是在自己的分支上执行reset倒是可行,但是如果在公共分支上执行reset指令,则可能出现冲掉其他开发者提交的commit的情况,因此reset指令需要慎重使用


回到我们的项目中,本地切换分支到array-algorithm,小修改一下代码,然后重新执行commit:

然后使用git log查看本地提交记录。发现刚提交的commit为最新版本。此时如果想回退到上次的commit版本时,可以使用 git reset --soft commit id 来进行回退:

  git reset --soft 86896b7a350


此时,我们再查看提交记录,就会发现版本回退到了上次提交的版本:


一般来说,使用reset指令回退了代码后,在推送到云端仓库时会报错,提示本地代码版本落后于远程分支代码(因为回退了代码嘛),此时我们就需要使用 git push -f 来进行强制推送。
需要注意的是:强制推送会使本地代码直接覆盖远程分支代码,因此需要谨慎使用!

git push -f <远程分支名>

revert指令


相比于reset直接回退到指定版本的commit来说, revert的原理是在当前提交后面,新增一次提交,从而达到抵消掉之前commit的版本导致的所有变化。它不会改变过去的历史,所以不会存在丢失代码的风险,因此是回滚的首选方案


回到我们的项目中,在array-algorithm分支上,小修改一点代码。然后commit内容到本地仓库:

接着执行一下git log查看一下本地提交记录:

发现最新的commit id为74a5219打头。如果此时我们想要回滚commit id为86896b7a的代码,
就可以使用git revert来实现:

  git revert 86896b7a

然后执行git log,就会发现新增了一次commit,内容中删除了我们回滚的代码版本中的内容。

大家需要区分的一点是: git reset后面跟的commit id是我们想要回退到的commit版本,而git revert后面跟的commit id是开发者想要删去的commit版本。


总结

掌握git中高频指令的使用方式可以大大提高协同开发的效率。市面上也有很多可视化的工具来帮助大家更好的上手git,比如:forksmartGit


本文主要讲解了git中最基本最常用的一些指令。坦白说,git中的学问远不止这些,但个人建议大家不要狂啃理论,在实践中用到时再去学可能会记得更牢固!


下一篇聊聊前端跨域~


参考文献:
[1]https://blog.csdn.net/lala_yanzi/article/details/124962662
[2]https://blog.csdn.net/awei970512/article/details/127029596
[3]https://blog.csdn.net/Lakers2015/article/details/111318801
[4]https://juejin.cn/post/6844903749631098893
[5]https://m.runoob.com/git/git-reset.html
[6]https://geek-docs.com/git/git-cmds/git-reset.html
[7]https://juejin.cn/post/6974184935804534815

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24621.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT提示词工程师教程-指南

参考视频&#xff1a;chatGPT提示词工程进阶教学 | 第二期&#xff1a;如何更清晰、更具体地书写提示词 (Lesson02 guidelines)_哔哩哔哩_bilibili 本篇主要提出两个原则&#xff1a;如何更清晰、具体地书写提示词&#xff1b;给模型充足的思考时间。 原则1&#xff1a;如何更…

从0到1,入门到进阶玩转AI——Stable Diffusion超详细教程(一)

前沿 目前市面上的AI主要集中在两方面&#xff0c;一方面是AI 作图&#xff08;代表产品&#xff1a;Midjourney和Stable-Diffusion&#xff09;&#xff0c;一方面是AI应答&#xff08;代表产品&#xff1a;ChatGPT&#xff09;&#xff0c;本文主要针对AI作图进行探索。 由于…

nvm安装步骤

注意事项&#xff1a; 1、不能安装任何node版本&#xff08;如存在请删除后安装nvm&#xff09;; 安装步骤&#xff1a; 1、下载nvm 解压后点击exe文件进行安装&#xff1a; &#xff08;1&#xff09;同意相关协议内容&#xff1a; 2、点击下一步安装到 D:\NVM 下 3、创建nod…

【自然语言处理】【ChatGPT系列】WebGPT:基于人类反馈的浏览器辅助问答

WebGPT: 基于人类反馈的浏览器辅助问答 《WebGPT: Browser-assisted question-answering with human feedback》 论文地址&#xff1a;https://arxiv.org/pdf/2112.09332.pdf 相关博客 【自然语言处理】【大模型】BLOOM&#xff1a;一个176B参数且可开放获取的多语言模型 【自然…

解决华为手机破解巧影软件无法使用

原文地址&#xff1a;https://blog.csdn.net/dx147305114/article/details/87863052 本次解决的是部分巧影破解软件的问题&#xff0c;在网上看了很多都是关于华为手机无法使用破解巧影的问题&#xff0c;整理了一下解决方案&#xff0c;供大家参考。 1、使用的破解巧影版本 …

华为服务器rh-2286远程控制无法使用

前言 "都是废话“ 在咸鱼购买的华为服务器rh2286&#xff0c;功耗太大没怎么用&#xff0c;在家闲置&#xff0c;上个月去用下发现远程控制功能不能使用&#xff0c;这不难受坏啊&#xff0c;我可不想在机房给这东西装系统&#xff0c;嗡嗡的吵得脑袋都疼&#xff0c;因型…

华为eNSP的介绍与简单使用

一、eNSP 1.什么是eNSP eNSP(Enterprise Network Simulation Platform)是一款由华为提供的免费的、可扩展的、图形化操作的网络仿真工具平台&#xff0c;主要对企业网络路由器、交换机进行软件仿真&#xff0c;完美呈现真实设备实景&#xff0c;支持大型网络模拟&#xff0c;让…

华为ipop使用教程_华为内部远程工具——IPOP,了解一下

之前推荐了xshell、mobaxterm等&#xff0c;今天就推一个之前华为内部使用的远程工具&#xff0c;现在部分研发依然在使用&#xff0c;这款软件仅2M大小&#xff0c;但是功能非常强大&#xff0c;应证小巧而不简单&#xff0c;虽然没有那么好的UI界面&#xff0c;实用性比较高 …

使用ADB命令-停用华为手机系统更新组件

需求 如下图所示&#xff0c;Huawei Mate20 系统升级EMUI11之后&#xff0c;多次出现充电死机&#xff0c;遂退回EMUI10稳定版。但系统更新每天19时左右总会弹窗提示更新&#xff0c;同时在手机UI界面上没有取消自动更新提示的选项&#xff0c;即使进入开发者选项也无法解决问题…

华为eNSP安装使用教程 故障解决

eNSP V100R003C00SPC100版本说明书 目 录 前 言 ii 1 版本配套说明 5 1.1 产品版本信息 5 1.2 相关产品版本配套说明 5 1.3 CE\NE\CX和USG6000V使用说明 6 1.4 相关软件依赖 8 1.5 与操作系统配套说明 8 2 版本使用注意事项 10 3 V100R003C00SPC100 11 3.1 更新说明 11 3.2 已…

华为面试宝典OD

目录 什么是OD&#xff1f; 目标院校 面试流程 薪资待遇 如何转正&#xff1f; 招聘实况 各语言题库&#xff1a;2023/2022 最新机试题及讲解&#xff0c;100%通过率。 【PythonJSJava合集】【超值优惠】&#xff1a;Py/JS/Java合集 【Python】&#xff1a;Python真题题库…

Zabbix5.0 使用SNMPv2监控华为交换机

记录下zabbix 监控华为交换机的方法 目录 Zabbix服务端SNMP服务配置华为交换机配置Zabbix服务端配置主机检查结果 Zabbix服务端SNMP服务配置 我的zabbix服务端操作系统为CentOS 7&#xff0c;首先下载SNMP yum install net-snmp,net-snmp-utils下载完毕后&#xff0c;修改SNM…

华为手机使用HiSuite升级和降级刷机方法

华为手机使用HiSuite升级和降级刷机方法可参考以下案例&#xff1a; 华为mate30鸿蒙系统刷安卓10系统 1、下载工具包 链接&#xff1a;https://pan.baidu.com/s/1pifkFD63wXpH7WQZl7i-Yw 提取码&#xff1a;kob5 2、安装手机助手 打开HiSuite OVE版本工具&#xff08;HiSu…

华为云ModelArts的使用教程(超详细)

目录 1: 注册华为云账号 2: 申请访问密钥&#xff08;可用于OBS Browser登录&#xff09; 3: 创建OBS桶 4: 授权ModelArts 5: 导入数据集 &#xff08;1&#xff09;直接通过AI Gallery下载 &#xff08;2&#xff09;利用自己已有的数据集 6: 自主学习 6.1 物体检测​…

华为手机怎么使用读卡器_手机nfc功能怎么打开(华为手机nfc功能使用步骤)

手机自带的NFC功能在前几年被很多人所吐槽,说是一种很鸡肋的功能,但在今天大家才恍然大悟NFC功能真的太强了!大家所说的NFC功能到底是什么?官方给出的解释:NFC是近距离无线通讯技术,懂不懂不重要,它能给你带来便利才重要。只要你的手机里有NFC功能,它就能变身为各种卡,…

华为防火墙黑白名单网址过滤设置

项目背景&#xff1a;现在有一个新项目&#xff0c;要求设置网站黑白名单&#xff0c;即vlan84这个网段只允许访问*.kuaidi100.之类的&#xff0c;其他的不允许&#xff1b;vlan85这个网段.youku.*等视频网段不能访问外&#xff0c;其他的都可以访问。 要求如下&#xff1a; …

使用华为云后的感受

初遇华为云 本人在C站粉丝挺多的&#xff0c;有一次华为云的代理找我叫我帮他推广云服务器&#xff0c;如果有人从我的链接购买每次会给我返佣。后来正好在做渗透测试的时候自己也需要云服务器&#xff0c;所以就买了华为云。 华为云优势 本人初次使用华为云产品给我的感觉…

华为自带时钟天气下载_华为天气时钟农历插件,求华为自带的天气时钟

说到华为天气时钟农历插件&#xff0c;大家都知道&#xff0c;有人问求华为自带的气候钟表插件&#xff0c;另外&#xff0c;还有人想问求华为自带的天气时钟插件&#xff0c;这是怎么回事&#xff1f;其实求华为自带的天气钟表插件&#xff0c;下面就一起来看看求华为自带的天…

华为鸿蒙小插件,华为鸿蒙系统细节曝光 可添加Widget插件

在上周&#xff0c;华为鸿蒙系统被曝在华为Mate 30系列手机上开启测试&#xff0c;并对该操作系统进行改进&#xff0c;不过测试的结果究竟如何呢?直到7月9日&#xff0c;一位不愿透露姓名的内测人员向外媒huaweicentral透露了鸿蒙系统的部分细节。 华为鸿蒙(图取自huaweicent…

再厉害的程序员都有这三个痛点,然而它没有

作为一名资深程序员&#xff0c;我一直以为这三个痛点是天经地义、理所应当的&#xff0c;所以就一直逆来顺受&#xff0c;习以为常。直到ChatGPT的出现&#xff0c;我才意识到&#xff0c;这三个痛点是可以被同时打破的&#xff0c;甚至有了一种岌岌可危的感觉&#xff0c;所以…