一文带你精通 Git(Git 安装与使用、Git 命令精讲、项目的推送与克隆)-程序员宅基地

技术标签: git  开发工具  前端  开发工具/开发语言  后端  

目录

一、什么是 GIT

二、GIT 的安装

三、使用 Git 管理项目

1. 准备

2. 初始化 Git 仓库

3. 配置 Git 使用者的用户名和邮箱

4. 将代码存储到 Git 仓库中

5. 查看文件状态

6. 查看日志(提交记录)

7. 版本回退

8. 通过版本号切换版本

9. 创建、切换、合并、删除分支

10. 推送本地代码文件至 Github/Gitee

11. 克隆云端的项目文件到本地

12. 通过 SSH 方式推送代码

四、GIT 操作命令汇总


一、什么是 GIT

        Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git是用于Linux内核开发的版本控制工具。与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。Git的速度很快,这对于诸如Linux内核这样的大项目来说自然很重要。Git最为出色的是它的合并追踪(merge tracing)能力。

        当代码量很大,而且需要人工的处理不同的版本时,如果仅仅通过拷贝来做相应备份是非常麻烦的,这时候就需要用 Git 来管理我们的代码。而且 Git 可以随意进行版本的切换,假如我们不再想用修改后的版本二,只需要用 GIt 将其还原为版本一即可。

二、GIT 的安装

        安装GIt 很简单,与其他软件没有区别,在软件商店直接下载安装即可,我用的是软件盒子;

随后出现弹框,依次点击“下一步”。需要注意的是记住 Git 的安装路径,因为想要在开发软件使用 Git 仅仅下载安装还不行,还需要在开发软件中进行配置。

安装完成后 Git 目录如下:

Git 命令相关操作命令在 git-bash 中书写,git-bash 也可以直接在桌面右键打开。

三、使用 Git 管理项目

1. 准备

        首先我们在电脑桌面创建一个文件夹,我们将它命名为 project,假设这个 project 文件夹就是我们所开发的项目。接下来通过 Git 对我们的“项目”进行相关管理。

在 project 文件夹下 右键 --> Git Bash Here 打开 Git 命令行;

2. 初始化 Git 仓库

        在 Git 命令行中 git init 新建一个文件夹,用于管理我们的代码;git 指的是我们使用 Git 这款软件进行管理,init 意为初始化;

按下回车后会提示创建成功:在 C:/Users/Administrator/Desktop/project/.git/ 目录下初始化空的 Git 存储库,也可以说是空的 Git 仓库。

注意刚刚创建后 .git 是一个隐藏目录,我们需要设置开启隐藏才能看到该目录。在文件夹点击 查看 --> 显示 --> 隐藏的项目。

如下,项目目录中已经有了我们创建的空的 Git 仓库。之后 Git 会自动帮我们将代码备份到这个 .git 目录当中。

初始化 Git 仓库完成之后,就可以在 project 目录中正常进行开发了。

3. 配置 Git 使用者的用户名和邮箱

        使用 git config --global user.name "用户昵称" 配置用户名,输入命令后回车,没有任何提示,则说明用户名设置成功;

        使用 git config --global user.email "用户邮箱" 配置用户邮箱;同样没有任何提示,说明设置成功。

        进行以上配置后,Git 除每次会将我们的项目相关文件自动备份至 .git 仓库之外,也会自动存储我们的个人信息,这样就知道每一次操作是由谁来进行的了。

4. 将代码存储到 Git 仓库中

        我们在项目目录 project 中 创建一个文件 test.html,作为代码文件用于存储。

将代码文件存储至 Git 仓库需要两步,首先使用 git add ./添加的文件名 添加代码文件至暂存区,此处的相对路径 ./ 就代表当前目录 project。

(如果有多个文件需要提交,也可直接输入命令 git add ./ ,这样就会把相对路径下的所有代码文件添加至暂存区;)

接下来进行存储,使用 git commit -m "说明信息" 将刚添加至暂存区的代码文件提交至仓库,commit 为提交,-m 表示信息,注意说明信息必须写。

代码文件修改后,重复上面操作 先添加 再提交 即可;

        如果觉得上面两步过于繁琐,在修改若干代码文件后,也可以直接使用命令 git commit --all -m "说明信息" 直接将目录下的所有文件提交,而不用先添加。

5. 查看文件状态

        对于一个代码文件,我们有时候会忘记对它做过那些操作,比如这个文件现在是什么状态?在暂存区?还是已经提交?或者是修改了但未提交?这个时候我们就需要通过 git status 命令查看它的状态。如下:此时未做任何修改且已经提交。

我们试着将 test.html 修改为 test.txt 后再次添加后查看状态;如下显示 test.html 已删除,添加了新的文件 test.txt;

6. 查看日志(提交记录)

        当想要知道已经向GIT仓库提交了多少次文件时,就可以使用命令 git log 来查看日志;如下图,我们已经提交了两次,提交者为 xiaoma<[email protected]>。

为了便于查看我们也可以设置提交日志为一行显示,这样更加精简,命令为 git log --oneline;如下显示有两个版本,前面为版本号,后面为版本描述信息。

7. 版本回退

        如果说在修改代码时不小心进行了误操作,比如误删除了代码、代码改错了等,在 GIT 中这些问题都不需要担心,使用命令 git reset --hard head~0 进行版本回退即可,reset 意为重置, head 表示离当前版本最相近的上一版本,~0 则代表往前回退一次,~1 则代表两次...,如下图表示目前处于 2ab6b4c 版本。

8. 通过版本号切换版本

        如果一个项目中版本有很多,这时候再用版本回退的方式就显得有点笨重且不准确。而更简单的方式就是直接通过版本号切换版本,命令为 git reset --hard 版本号

但此时也会有一个问题,版本号过多时我们很难记忆,而且在切换版本之后,再使用 git log 命令显示日志也只会显示当前版本一个日志;那么这个时候我们就可以使用命令 git reflog 来列出所有操作过程中经历的版本号

9. 创建、切换、合并、删除分支

        在开发过程中如果某个功能做了一半并没有完成,但是也需要提交。而这样的功能直接提交后肯定会影响到整个项目。为了避免这个问题,就需要使用分支,先将未完成的功能提交到自己的分支,待完成后再合并到项目主线当中,互不影响。

在 GIT 中会有一个默认分支 master,接下来我们自己创建一个分支,使用命令 git branch 分支名,不提示则说明创建成功;

想要查看当前项目中的所有分支使用命令 git branch 即可,如下,目前处于 master 分支;

切换分支时使用命令 git checkout 分支名

合并分支时使用命令 git merge 指定分支;意为将当前所在的分支合并到指定分支。

想要删除分支时使用命令 git branch -d 分支名,需要注意在删除分支时是不能删除自己当前所在分支的,需要切换后再删除

10. 推送本地代码文件至 Github/Gitee

        在团队协同开发项目中,每个分支的的代码最后需要提交到一个汇总项目文件的地方,大家可以公用,也就是服务器,而通常使用的 Github 或者 码云Gitee 其实就相当于一个云服务器。(注意 GIT 和 Github不是同一个东西)

这里我使用Gitee来演示推送代码操作:

首先进入 GItee 正常注册登录;

登陆之后,新建一个仓库;

创建完成会进入以下界面,仓库地址正是我们推送代码需要使用到的;

Gitee 仓库创建完成后,在本地使用命令 git push 云端仓库地址 master 将文件推送至 Gitee,在第一次推送时会让我们输入 Gitee 用户名和密码,输入自己的账号信息即可,如下:

成功后会有如下提示,表明推送成功;

这时在我们的 Gitee 中就可以看到相关操作提示以及提交的代码文件了;

Github操作同上。

11. 克隆云端的项目文件到本地

        通过第十步的操作,项目文件就存储到我们的 Gitee 仓库当中了,之后有其他成员想得到项目文件只需到 Gitee 中克隆即可;

除此之外也可以在在本地通过命令进行克隆:新建一个文件,初始化 GIt 仓库后,输入命令 git pull 云端仓库地址 分支名 即可将云端项目克隆至本地。

12. 通过 SSH 方式推送代码

        在前面的操作中我们推送代码时需要输入用户名和密码,涉及个人隐私自然是不安全的;

        如果我们采用 SSH 方式,就不需要输入这些信息了。但是不输入账号信息并不代表不需要验证上传者的身份,需要知道 SSH 方式是采用 公钥  私钥 来验证上传者身份的。私钥由 GIt 使用者保留,公钥则用于云端也就是 Gitee/Github,在上传的时候会将使用者的私钥和云端的公钥进行校对,以验证上传者的身份。

在 Git 中通过命令 ssh-keygen -t rsa -C "邮箱" 生成公钥和私钥;在任意目录打开 GIt 命令行,输入命令,如下提示则说明生成成功。

由上图可知我们将公钥私钥保存在了目录 (/c/Users/Administrator/.ssh/id_rsa) 下,所以到此处查看密钥,如下:

打开文件查看公钥,将此公钥设置到 Gitee上;

复制公钥到 gitee 管理 --> 部署公钥管理 --> 添加公钥中;

此时 SSH 设置完成,推送代码时命令不变,使用 Gitee 中 SSH 格式的地址即可;

克隆代码时,也选择 SSH 选项进行克隆;

四、GIT 操作命令汇总

命令 含义
git init 初始化GIT仓库
git config --global user.name "用户昵称" 配置GIT使用者的用户名
git config --global user.email "用户邮箱" 配置GIT使用者的邮箱
git add ./添加的文件名 将指定文件添加至暂存区,以备提交
git add ./ 将相对路径 ./ 下的所有文件添加至暂存区
git commit -m "说明信息" 将存到暂存区的文件提交至GIT仓库(版本库)
git commit --all -m "说明信息" 结合添加和修改,一次性将代码文件提交至GIT仓库
git status 查看文件状态
git log 查看日志(提交记录)
git log --oneline 查看日志,结果一行显示
git reset --hard head~0 版本回退,0代表回退一次,1代表两次
git reset --hard 版本号 切换至指定版本号的版本
git reflog 列出操作过程中经历的所有版本号
git branch 分支名 创建分支
git branch 查看所有分支
git checkout 分支名 切换分支
git merge 指定分支 将当前所在的分支合并到指定分支
git push 云端仓库地址 分支名 将项目文件推送到远程服务器指定的分支
git pull 云端仓库地址 分支名 将云端的项目文件克隆至本地
ssh-keygen -t rsa -C "邮箱" 生成公钥和私钥
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_53072519/article/details/122824860

智能推荐

tensorflow中input_data读取本地MNIST_data失败的原因_input_data.read_data_sets("mnist_data/", 报错<urlope-程序员宅基地

文章浏览阅读9.8k次。下载了MNIST_data保存在本地,一定不要解压!不要解压!不要解压!因为input_data.read_data_sets读取的是压缩包import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_datainput_data.read_data_sets("/home/wd/MNIST_da..._input_data.read_data_sets("mnist_data/", 报错

python--django for 循环中,获取序号-程序员宅基地

文章浏览阅读780次。功能需求:在前端页面中,for循环id会构不成连续的顺序号,所以要找到一种伪列的方式来根据数据量定义序号因此就用到了在前端页面中的一个字段forloop.counter,完美解决 1 <tbody> 2 {% for inrow in insocket_list %} 3 <tr> 4 ..._django for循环输出数字1到10

GoLand或其它JetBrains产品中Git的提速方法_goland 提交代码 太慢-程序员宅基地

文章浏览阅读411次。今天在GoLand中提交项目代码的时候,发现Git的速度很慢,热心的同事看到后交给了我一个方法:找到IDE的安装目录,打开bin文件夹,将该文件夹下的runnerw.exe 和runnerw64.exe的后缀改一下,随便怎么该都行,只要不是.exe 结尾,我的改成runnerw.exe.bak。然后就会发现,git的速度会快很多。..._goland 提交代码 太慢

关于layer.js 弹出框表单提交关闭父窗口出现表单提交失效的问题_parent.layer submit-程序员宅基地

文章浏览阅读4.8k次。对于layer.js出现回调关闭父类的弹出层时,之前的表单的submit失效的问题: 如何解决:网上有很多,有的是转为ajax的请求,在数据传输完再关闭父类的弹出层: 下面是关闭父弹出层的办法: var index = parent.layer.getFrameIndex(window.name); //获取窗口索引 parent.lay_parent.layer submit

Ubuntu server 14.04 LTS 多网卡绑定实现负载均衡_ubuntu 14.04 lts网卡聚合配置-程序员宅基地

文章浏览阅读1.1w次。将两张网卡绑定,共用一个IP,实现冗余效果。实际上linux双网卡的绑定模式有7种:安装负载软件apt-get install ifenslave加载模块及配置负载vi /etc/modules添加bonding mode=0 miimon=100miimon是10ms监测一次网卡状态配置bond0注:bond IP与成员口的IP不能一致,如果不想成员口IP获得本网段地址,可以随便配置一个。_ubuntu 14.04 lts网卡聚合配置

pillow的简单使用_img_gray = image.open('/h/%d.tiff' % (i+1)).conver-程序员宅基地

文章浏览阅读896次。导入from PIL import Image加载图片和保存图片在保存图片的时候会根据输入文件名的后缀名自动转换文件格式image = Image.open(r'./lena.tiff')image.save(r'./lena.jpg')image.save(r'./lena.bmp')图像的对象的主要属性参数含义image.format图片的格式,如jpg等image.size图片的尺寸,如1920*1080image.mode图片的色彩模式,如r_img_gray = image.open('/h/%d.tiff' % (i+1)).convert('la')

随便推点

万字干货:大道至简,用户增长模型体系/完整方法论/实操经验分享_上来就问增长方法论-程序员宅基地

文章浏览阅读2.1k次。相信大家这两年可能都有这种感觉,无论大小厂都开始关注起了增长,都在聊起了增长。那么用户增长体系包括哪些模块,有哪些增长模型体系,有哪些方法论?整个体系应该怎么来搭建,本文以我在马上消费金融的实战案例通过1.3万字和40张图带你从0到1搭建用户增长体系。_上来就问增长方法论

(包教必会)Arduino环境下ESP32部署指南_arduino esp32包下载到的文件夹-程序员宅基地

文章浏览阅读1w次,点赞27次,收藏84次。(包教必会)Arduino环境下ESP32部署指南Arduino IDE下载安装Arduino IDE点击此处访问arduino官网,选择适合你电脑系统的版本进行下载安装ESP32的板管理打开Arduino IDE,选择文件->首选项->设置2.复制下方的ESP32板管理网址到,**附加开发板管理器:**中 https://dl.espressif.com/dl/package_esp32_index.json3.选择:工具->开发板->开发_arduino esp32包下载到的文件夹

2019年第十届蓝桥杯 - 国赛 - C/C++大学A组 - A. 三省序列_试题a: 三升序列-程序员宅基地

文章浏览阅读2.4k次。【问题描述】对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向右看、或者从上向下看是递增的。例如,如下矩阵中YQPDBKEZAFYV有BKZ、BEZ、AFY、AFV、AKP、DEF 等 6 个三升序列。注意当三个字母是从左下到右上排列时,从左向右看和从上向下看是不同的顺序。对于下面的 30 行 50 列的矩阵,请问总共有多少个三升序列?(如果你把以下文字复制到文本文件中,请务必检查复制的内容是否与文档中的一_试题a: 三升序列

关于在Windows10上安装face_recognition的方式和注意事项_facerecognitionwin.cpp:70:50: warning: unused para-程序员宅基地

文章浏览阅读1.7k次,点赞4次,收藏9次。关于在Windows10上安装face_recognition的方式和注意事项face_recognition是python的一个第三方的关于人脸识别的库。一般来说在Linux和MAC系统上装face_recognition是比较容易的,而在Windows上装则会比较麻烦,得先装dlib,而且dlib还有版本的需求。笔者是一个刚学了一个多月代码的大学生,因此对许多概念还并不是很熟悉。在学完pyt..._facerecognitionwin.cpp:70:50: warning: unused parameter 'e

洛谷 P4597 序列sequence【贪心】【思维】_洛谷 贪心 匹配-程序员宅基地

文章浏览阅读296次。...题目:题意:分析:代码:题目:传送门题意:给出一个长度为nnn的序列,求将原序列转化为非下降序列最少步数分析:假如我们已经解决了之前的数,现在新加入一个数字xxx,如果其比之前的最大值小,那么因为要保证非下降,所以我们需要将最大值变为xxx或将xxx变为最大值,两者的代价是一样的。但因为最大值越小,我们后面加入的数字就更容易保证非下降,所以步数是最大值−x最大值-x最大值−..._洛谷 贪心 匹配

HTML5——canvas小练习——函数图_html绘制数学曲线代码-程序员宅基地

文章浏览阅读1.4k次,点赞2次,收藏7次。HTML5小练习之canvas画图练习,画一个数学sin函数:效果图如下:代码:<!DOCTYPE html><html><head> <!-- Css样式 --> <style type="text/css"> .mainone { display: inli..._html绘制数学曲线代码

推荐文章

热门文章

相关标签