Git从入门到精通

news2024/11/29 20:37:33

 

目录

 

Git 配置

1. 在安装完成 Git 后,开始正式使用前,是需要有一些全局设置的,如用户名、邮箱。

2. 除了用户名、邮箱之外,还有很多的配置可以用来自定义 Git,如:

3. 查看所有的已经做出的配置:

基础操作

1. 创建 Git 版本库

2. 将文件添加到版本库

3. 查看仓库的状态

4. 查看仓库中的具体修改

5. 查看提交历史记录 

 6. 版本回退

7. 回到未来的某个提交

8. 撤销修改

 9. 删除文件

分支管理

1. 查看分支

2. 创建分支

3. 切换分支

4. 创建并切换分支

5. 合并分支

远程仓库

2. 添加远程仓库

3. 推送本地的内容到远程仓库

4. 从远程仓库获取最新内容

5. 查看远程仓库信息

6. 建立本地分支和远程分支的关联

7. 修改本地仓库对应的远程仓库地址

标签管理

1. 创建标签

2. 查看所有标签

3. 查看具体标签信息

4. 删除本地标签

5. 删除远程标签

6. 推送标签到远程仓库

进阶操作


Git 配置

1. 在安装完成 Git 后,开始正式使用前,是需要有一些全局设置的,如用户名、邮箱。

设置的主要命令是 git config:

git config --global user.name "your name"      // 设置全局用户名
git config --global user.email "your email"    // 设置邮箱

其中, --global 指定为全局配置,不使用该参数,则为当前所在仓库配置。

2. 除了用户名、邮箱之外,还有很多的配置可以用来自定义 Git,如:

git config --global color.ui true        // 让 Git 显示不同的颜色
git config core.ignorecase true            // 让 Git 对仓库中的文件大小写敏感

3. 查看所有的已经做出的配置:

git config -l

基础操作

1. 创建 Git 版本库

在本地创建 Git 版本库,需要使用 git init 命令。

首先,你需要新建一个存放版本库的目录,然后进入到该目录所在路径,然后执行:

git init

然后查看目录结构中,就可以看到包含有 .git 子目录,这就说明创建版本库成功了。

2. 将文件添加到版本库

要将一个文件纳入到版本库管理,首先要将其添加到暂存区(这里不做深入介绍),然后才能提交到仓库中。

2.1 将文件添加到暂存区,使用的是 git add

git add Readme.md        // 添加单个文件到暂存区
git add .                // 将当前目录下所有修改添加到暂存区,除按照规则忽略的之外
注意:这边空文件夹是不会被添加到暂存区中的。

2.2 将暂存区中的文件,提交到仓库中。需要使用 git commit

git commit        // 如果暂存区有文件,则将其中的文件提交到仓库
git commit -m 'your comments'         // 带评论提交,用于说明提交内容、变更、作用等

注意:这边直接用 git commit 提交,会先弹出添加评论的页面。

3. 查看仓库的状态

不论我们是新建了文件,将文件加入暂存区,或者其他的修改等等,我们都可以通过:

git status

来随时查看仓库中文件的状态。这个应该是使用 Git 做版本控制过程中,我使用最多的一个命令。

4. 查看仓库中的具体修改

很经常的,我们对某个文件做了修改,但过不久就忘记了。这时候就可以通过 git diff 来查看具体的修改内容。

git diff    // 查看版本库中所有的改动
git diff Readme.md        // 查看具体文件的改动

5. 查看提交历史记录 

有的时候,你会需要查看自己做过哪些提交,来回顾自己完成的部分。或者需要寻找某个具体的提交来查看当时的代码。这里需要用到:

git log     // 显示所有提交的历史记录
git log --pretty=oneline    // 单行显示提交历史记录的内容

 6. 版本回退

有了 git log 来查看提交的历史记录,我们就可以通过 git reset --hard 来回退到我们需要的特定版本,然后使用当时的代码进行各种操作。

git reset --hard HEAD^        // 回退到上一个提交版本
git reset --hard HEAD^^        // 回退到上上一个提交版本
git reset --hard 'commit_id'    // 会退到 commit_id 指定的提交版本

7. 回到未来的某个提交

当退回到某个提交的版本以后,再通过 git log 是无法显示在这之后的提交信息的。但是,通过 git reflog 可以获取到操作命令的历史。因此,想要回到未来的某个提交,先通过 git reflog 从历史命令中找到想要回到的提交版本的 ID,然后通过 git reset --hard 来切换。

git reflog
git reset --hard 'commit_id'

 

8. 撤销修改

撤销修改同样包括两方面的内容,由于仓库中的文件在提交之前,可能在工作区中,尚未在版本控制范围内,也可能在暂存区中。

8.1 丢弃工作区中文件的修改

git checkout -- Readme.md    // 如果 Readme.md 文件在工作区,则丢弃其修改
git checkout -- .            // 丢弃当前目录下所有工作区中文件的修改

注意: git checkout -- 中的 -- 是必须的。

8.2 丢弃已经进入暂存区的修改

git reset HEAD Readme.md // 将 Readme.md 恢复到 HEAD 提交版本的状态

 9. 删除文件

在文件未添加到暂存区之前,对想删除文件可以直接物理删除。或者通过 git checkout -- file 来丢弃。如果文件已经被提交,则需要 git rm 来删除:

git rm Readme.md // 删除已经被提交过的 Readme.md

注意: git rm 只能删除已经提交到版本库中的文件。其他状态的文件直接用这个命令操作是出错的。


分支管理

分支是版本控制系统中很重要的一个概念,在 Git 中新建、合并等分支的操作非常轻量便捷,因此我们会很经常的用到。

1. 查看分支

查看分支使用 git branch

git branch        // 查看本地分支信息
git branch -v     // 查看相对详细的本地分支信息
git branch -av     // 查看包括远程仓库在内的分支信息

注意:在 git branch 的输出内容中,有一个分支,前面带有 * 号,这标识我们当前所在的分支。

2. 创建分支

当我们要修复一个 Bug,或者开发一个新特性,甚至是在初学的时候怕打乱原来的代码,都可以新建一个分支来避免对原来代码的影响。

git branch dev // 新建一个名称为 dev 的分支

3. 切换分支

当我们创建完分支以后,我们需要切换到新建的分支,否则,所有的修改,还是在原来的分支上。事实上,所有的改动,只能影响到当前所在的分支。

git checkout dev // 新建完 dev 分支以后,通过该命令切换到 dev 分支

4. 创建并切换分支

git checkout -b dev // 新建 dev 分支,并切换到该分支上

5. 合并分支

当我们修复完成一个 Bug,或者开发完成一个新特性,我们就会把相关的 Bug 或者 特性的上修改合并回原来的主分支上,这时候就需要 git merge 来做分支的合并。

首先需要切换回最终要合并到的分支,如 master

git checkout master        // 切换回 master 分支
git merge dev            // 将 dev 分钟中的修改合并回 master 分支

合并回主分支的时候,后面可能会面临到冲突的问题。冲突的解决暂不在这里说明。


远程仓库

上面的所有命令都是针对本地仓库的操作。当我们希望多个人来协作时,会将代码发布到一个统一的远程仓库,然后多个人在本地操作以后,在推送到远程仓库。其他人协作时,需要先同步远程仓库的内容,再推送自己的修改。

1. 从远程仓库克隆
如果你本地没有仓库,希望从已有的远程仓库上复制一份代码,那么你需要 git clone。

git clone https://github.com/git/git.git     // 通过 https 协议,克隆 Github 上 git 仓库的源码
git clone linfuyan@github.com/git/git.git    // 通过 ssh 协议,克隆 Github 上 git 仓库的源码

注意: git clone 后面的仓库地址,可以支持多种协议,如 https, ssh 等。

2. 添加远程仓库

如果你已经有了一个本地仓库,如之前创建的 git-guide,然后你打算将它发布到远程,供其他人协作。那么使用:

git remote add origin your_remote_git_repo // 为本地仓库添加远程仓库

3. 推送本地的内容到远程仓库

git push -u origin master // 第一次推送时使用,可以简化后面的推送或者拉取命令使用
git push origin master    // 将本地 master 分支推送到 origin 远程分支

注意: git push -u origin master,第一次使用时,带上 -u 参数,在将本地的 master 分支推送到远程新的 master 分支的同时,还会把本地的 master 分支和远程的 master 分支关联起来。

4. 从远程仓库获取最新内容

在多人协作过程中,当自己完成了本地仓库中的提交,想要向远程仓库推送前,需要先获取到远程仓库的最新内容。

可以通过 git fetch 和 git pull 来获取远程仓库的内容。

git fetch origin master    
git pull origin master

git fetch 和 git pull 之间的区别:

  • git fetch 是仅仅获取远程仓库的更新内容,并不会自动做合并。
  • git pull 在获取远程仓库的内容后,会自动做合并,可以看成 git fetch 之后 git merge

注意:建议多使用 git fetch

5. 查看远程仓库信息

git remote [-v] // 显示远程仓库信息

6. 建立本地分支和远程分支的关联

在本地仓库中的分支和远程仓库中的分支是对应的。一般情况下,远程仓库中的分支名称和本地仓库中的分支名称是一致的。

有的时候,我们会需要指定本地分支与远程分支的关联。

git branch --set-upstream 'local_branch' origin/remote_branch

7. 修改本地仓库对应的远程仓库地址

当远程的仓库地址发生变化时,需要修改本地仓库对应的远程仓库的地址。主要应用在工程迁移过程中。

git remote set-url origin url

标签管理

在项目开发过程中,当一个版本发布完成时,是需要对代码打上标签,便于后续检索。获取处于其他的原因,需要对某个提交打上特定的标签。

1. 创建标签

git tag -a 'tagname' -m 'comment' 'commit_id'

-a 参数指定标签名, -m 添加备注信息, 'commit_id' 指定打标签的提交。

2. 查看所有标签

git tag // 查看本地仓库中的所有标签

3. 查看具体标签信息

git show tagname

4. 删除本地标签

如果打的标签出错,或者不在需要某个标签,则可以删除它。

git tag -d tagname

5. 删除远程标签

git push origin :refs/tags/tagname
 
git push origin --delete tagname
 
git push origin :tagname

6. 推送标签到远程仓库

打完标签以后,有需要推送到远程仓库。

6.1 推送单个标签到远程仓库

git push origin tagname

6.2 一次性推送所有标签到远程仓库。

git push origin --tags


进阶操作

1. 临时保存修改
在执行很多的 Git 操作的时候,是需要保持当前操作的仓库/分支处于 clean 状态,及没有未提交的修改。如 git pull, git merge 等等,如果有未提交的修改,这些将无法操作。

但是做这些事情的时候,你可能修改了比较多的代码,却又不想丢弃它。那么,你需要把这些修改临时保存起来,这就需要用到 git stash。

1.1 临时保存修改,这样仓库就可以回到 clean 状态。

git stash // 保存本地仓库中的临时修改。

注意:可以多次的 git stash 来保存不同的临时修改。

1.2 查看临时保存。当你临时保存以后,后面还是要取回来的,那它们在哪里呢?

git stash list // 显示所有临时修改

1.3 当我们处理完其他操作时,想要恢复临时保存的修改。

git stash apply        // 恢复所有保存的临时修改
git stash pop        // 恢复最近一次保存的临时修改

1.4 或者,我们后面觉得临时保存不想要了,那可以丢弃它。

git stash clear // 丢弃所有保存的临时修改

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python3 常用内置函数解析(共28个函数)

文章目录一:Python3 操作符(大全)二:函数带括号与不带括号的区别三:不可变数据类型与可变数据类型四:Python3 内置函数(大全)1、input():用于获取控制台的输入。2、print…

Django REST framework--渲染器

Django REST framework--渲染器Django REST framework--渲染器自定义接口规范渲染器基本原理Django 项目debug调试技巧异常信息处理配置异常处理模块自定义异常处理Django REST framework–渲染器 自定义接口规范 目前使用的是REST框架默认的返回格式,类似这种 […

【redis6】第十章(事务和锁机制)

Redis的事务定义 Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 Redis事务的主要作用就是串联多个命令防止别的命令插队。 Multi、Exec、discard 从输入Mu…

2023年面试题之Dubbo基础架构

一. Dubbo 的整体架构设计有哪些分层?接口服务层(Service):该层与业务逻辑相关,根据 provider 和 consumer 的业务设计对应的接口和实现配置层(Config):对外配置接口,以 ServiceCon…

Docker 应用实践-镜像篇

一个 Docker 镜像往往是由多个镜像层(可读层)叠加而成,每个层仅包含了前一层的差异部分,单个镜像层也往往可以看作镜像使用,当我们启动一个容器的时候,Docker 会加载镜像层并在其上添加一个可写层。容器上所…

C语言学习——字符函数和字符串函数

🌇个人主页:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 🛸C语言专栏:https://blog.csdn.net/vhhhbb/category_12174730.html 小苏希望大家能从这篇文章中收获到许…

实战Kaggle比赛:预测房价

实战Kaggle比赛:预测房价 目录 下载和缓存数据集访问和读取数据集数据预处理训练K折交叉验证模型选择提交Kaggle预测 本节我们将通过Kaggle比赛,将所学知识付诸实践。 Kaggle的房价预测比赛是一个很好的起点。 此数据集由Bart de Cock于2011年收集 (D…

Linux--线程互斥与同步--0112 13

线程互斥 1.背景概念 临界资源:多线程执行流共享的资源就叫做临界资源。 临界区:每个线程内部,访问临界资源的代码就叫做临界区。 互斥:任何时刻,互斥保证有且只有一个执行流进入临界区 ,对临界资源起保…

36岁北邮硕士,四段大厂经历,当初为了涨薪频繁跳槽,被裁后投遍所有公司,基本都不回复!...

今天给大家分享一位36岁北邮硕士的职场经历:2013年北邮硕士毕业后,分别在乐视、字节、阿里、小米待过,2022年被小米裁员,几乎投遍了boss上所有公司,基本都是已读不回。只有一个小公司的hr看了简历后回了一句“加油”。…

绕过某博客查看文章验证码,关注公众号得验证码

之前也写过一篇,当时使用Burpsuite抓包,改包,有点杀鸡用牛刀了。 虽然我挺支持为知识那啥的,但是吧要我去关注公众号太麻烦了 绕过查看文章需要验证码 其实就是改一个返回的字段,既然后端也是改,那我前端…

Google Earth Engine基础使用方法(一)

Google Earth Engine 1、注册账号1.1、设置谷歌账号辅助邮箱1.2、进入Google Earth Engine(如果第一次注册失败怎么办)1.3、进入Google Earth Engine Editor2、Editor主界面2.1、上传自己的矢量数据2.2、分享代码给别人2.3、保存代码2.4、几个有效快捷键2.5、搜索框有什么用3、…

SAP S/4 FAGLGVTR错误解决

本次年结支持过程中,一个客户的年结操作出现问题,问题的解决还颇费周折,稍稍记录一下。客户的SAP 版本是 S/4, 通过 FAA_CMP 事务码切换固定资产年度的时候,提示上一已关闭的会计年度与当前会计年度相同。 这个消息的意思是FI 的会…

【自学Python】Python字符串出现次数

Python字符串出现次数 Python字符串出现次数教程 在开发过程中,很多时候我们有统计单个字符或者 字符串 在另一个字符串中出现次数的需求,在 Python 中,统计字符串出现次数我们使用 count() 函数。 Python count()函数详解 语法 S.count…

Python实战项目1——自动获取小说工具

🤵‍♂️ 个人主页老虎也淘气 个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏…

【C++】二叉树进阶OJ题

​🌠 作者:阿亮joy. 🎆专栏:《吃透西嘎嘎》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉根据二叉…

前端开发:Webpack的使用总结

前言 在前端开发过程中,尤其是现在前端框架的频繁使用的当下,作为前端开发者想必对于Webpack并不陌生,尤其是在使用Vue框架做前端开发的时候,打包时候必用Webpack。还有就是在前端求职面试的时候,Webpack相关的知识点…

mysql新建分区设置阈值(less than)引发的问题

mysql新建分表后,入库之前分表区间的数据,但是再分表中查询不到对应数据。 文章目录问题背景问题解析新建分区sql查看分区查询数据查询数据所在分区修改方案总结LESS THAN相关sql查询分区删除分区先建分区问题背景 初始化表的时候,先建的日期…

(二)Jenkins全局工具配置

目录 1、插件管理 2、Gitee安装 2.1、插件安装 2.2、查看Gitee状态 2.3、配置Gitee 2.4、获取私人令牌 2.5、测试连接 3、全局配置jdk、ant、maven 3.1、jdk配置 3.2、ant配置 3.3、maven配置 4、插件镜像下载地址配置 (一)Jenkins部署、基础配置介绍在windows下安…

事务(transaction)

事务(重点 五颗星 ***** 必须理解 必须掌握) 1、什么是事务: 一个事务其实就是一个完整的业务逻辑。 假设转账,从A账户向B账户转账10000.将A账户的钱减去10000(update语句),将B账 户的钱增加100…

【手写 Vue2.x 源码】第二十六篇 - 数组依赖收集的实现

一,前言 上篇,主要介绍了数组依赖收集的原理 本篇,数组依赖收集的实现 二,对象依赖收集的总结 {}.dep > watcher 目前,“对象本身”和“对象中的每一个属性”都拥有一个 dep 属性,用于做依赖收集 此…