热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Git指南3个小时搞定git

先奉上Git常用命令速查表,方便大家查阅。图片来自于网络再来个目录说明,大家可以根据自己所需进行选择学习简单目录说明1git简介Git是世界上最牛逼的分布式版本控制系统。分布式版本

先奉上Git常用命令速查表,方便大家查阅。

《Git指南 - 3个小时搞定git》 图片来自于网络

再来个目录说明,大家可以根据自己所需进行选择学习

《Git指南 - 3个小时搞定git》 简单目录说明

1 git简介

Git是世界上最牛逼的分布式版本控制系统。

分布式版本控制系统:版本控制是一个用来记录一个或多个文件内容变化,以便将来查阅特定版本的修订情况的系统。

分布式和集中式的区别:

集中式版本控制系统:版本库是集中存放在中央服务器中,大家工作的时候自己的电脑必须要联网,才能拉获取到最新的版本库,工作结束后在上传至中央服务器。最新的版本库只存在于中央服务器中,安全性较低,提交速度较慢。

分布式版本控制系统:分布式版本控制系统可以没有中央服务器,因为每个人电脑中都会有一份完整的版本库,有人的版本库丢失了只需要向其他人复制一份就可以了,这样大大的提高了安全性。当然,分布式版本控制系统一般也是有一个中央服务器的,这样更加方便大家的文件的修改及统一。

2 安装

《Git指南 - 3个小时搞定git》 git安装自行解决🤓

Tip:以下操作使用 Git Bash

为了大家好,我就只截图,不贴代码啦😀

3 创建版本库

1)创建一个目录 or 进入一个目录

《Git指南 - 3个小时搞定git》 img1

2)使用 git init 将一个文件夹变成一个仓库

《Git指南 - 3个小时搞定git》 img2

这样一个空的仓库就创建了,仓库中的.git目录就是最好的证明,初始化仓库.git文件夹默认是隐藏的,可以手动设置可见性,也可以通过ls -sh来查看,这个目录就是git的核心,用来跟踪版本库的,即每个文件的修改、删除、还原都会被跟踪。

4 git的基本操作

首先,我们需要先来了解一下工作区,暂存区的概念。

《Git指南 - 3个小时搞定git》 img3

  • 工作区(Working Directory):就是我们电脑上可以看到的目录

  • 版本库(Repository):版本库就是我们初始化仓库时多出来的那个 .git文件夹。版本库中还包含了几个重要的东西。

  • 暂存区(Stage):工作区的文件使用add命令后会加入暂存区,而没有直接到仓库。

  • maste分支:master分支也是在仓库初始化时自动创建的,当暂存区的文件commit后就会默认加入仓库的master分支。

为了便于观察,就使用idea来做实验,文件不同的颜色对应不同的状态

  • 工作区:文件颜色是红色
  • 暂存区:文件颜色是绿色
  • 本地仓库中:文件颜色是白色
  • 对本地仓库文件修改后:文件颜色是蓝色

一步:先在工作区创建一个文件

《Git指南 - 3个小时搞定git》 img4

二步:将工作区文件add到暂存区

《Git指南 - 3个小时搞定git》 img5

三步:将暂存区文件commit到本地仓库

《Git指南 - 3个小时搞定git》 img6

四步:对仓库中文件进行修改后的状态变化

《Git指南 - 3个小时搞定git》 img7

在上述每一个步骤中都可以通过git status来查看工作区状态,通过git diff来查看修改的内容。

5 撤销修改

  • 撤销工作区的修改
    git checkout -- file:把文件放在工作区的修改全部撤销

1)修改后还没有被放到暂存区,将撤销回到git add的状态。

《Git指南 - 3个小时搞定git》 img8

2)已经添加到暂存区后做了修改,将撤销回到git commit状态

《Git指南 - 3个小时搞定git》 img9

  • 撤销已到缓存区的修改
    命令git reset HEAD file,HEAD为当前最新的版本。
    作用:将add进缓存区中的文件退回到工作区中。

6 版本回退、文件删除

先来了解两个命令:

  • git log:查看版本库状态

《Git指南 - 3个小时搞定git》 img10

可见我们刚才一共提交了三个版本,当我们需要回退版本时需要使用

git reset --hard HEAD^命令,
HEAD表示当前的版本,
HEAD^ 表示上一个版本,上上个版本就是
HEAD^^了,以此类推。
HEAD~50即回退50个版本。

  • git reflog:查看历史命令状态
    《Git指南 - 3个小时搞定git》 img11
    git loggit reflog最大的不同就是使用git reflog会有一个commit id,但我们需要回退版本的时候只需要找到对应的commit id号就可以了.。即

git reset --hard commit_id

对文件的删除方式有两种

  • git rm file命令:在删除的时候会将删除操作记录下来。
  • rm file命令:在删除文件的时候不会将删除操作记录下来。

《Git指南 - 3个小时搞定git》 img12

但我们还是可以用版本回退来恢复误删的文件。

7 远程仓库(以码云平台为例)

《Git指南 - 3个小时搞定git》 本地、远程仓库联系

既然是远程仓库,那么我们就要想办法去将本地的代码上传到远程仓库,
具体的步骤:
1)在码云上创建一个仓库。

2)本地初始化一个仓库,且仓库不能为空,否则当提交到远程仓库是失败

3)使用git remote add origin '远程仓库地址'命令关联远程仓库

4)关联远程仓库
第一次关联使用git push -u origin master命令,加上-u参数,git会把本地仓库master分支内容推送到远程仓库的master分支,并且会将本地的master分支和远程的master分支关联起来,以后本地提交时只需要使用git push origin master命令即可。当远程仓库为空时可以关联成功。

《Git指南 - 3个小时搞定git》 第一次关联流程

SSH KEY配置

SSH key提供了一种与GitHub通信的方式,通过这种方式,能够在不输入密码的情况下,将GitHub作为自己的remote端服务器,进行版本控制。

1)创建一个SSH key

ssh-keygen -t rsa -C "youremail"

随后一路回车吧,使用默认值就好。完成后会在用户目录下(C:\Users**.ssh)目录中id_rsaid_rsa.pub两个文件。

  • id_rsa.pub:需在码云个人资料中配置,主要用来加密,当你拉取数据时进行加密。
  • id_rsa:私钥,本地保留,对拉取到本地的数据进行解密

2)在码云上设置公钥信息

《Git指南 - 3个小时搞定git》 设置密钥

只有设置了SSH的电脑上才会免密码操作,其它没有设置的当需要提交的时候还是需要登录账号密码。当然你也可以在多个电脑上设置SSH,而且不管是id_rsa还是id_rsa_pub丢失,都必须重新生成密钥。

《Git指南 - 3个小时搞定git》 push/pull

克隆

两种方式:

git clone [-b ] ‘仓库地址’ //https协议
git clone [-b ] git@'平台地址':‘用户名’/‘仓库名’.git //ssh协议,速度较快

8 分支管理

分支概念

当我们每次提交时,都会产生一个版本,这些版本共同连成一条时间线,这条时间线就是一个分支。

分支基础
  • 在我们没有创建分支时,git会默认给我们创建一个master分支。刚才讲的HEAD是指向分支的,即当前分支,在这就是指向master分支,而master才是指向提交的。
    • 查看当前分支

git branch //会列出所有分支,分支前有*号的表示当前分支

《Git指南 - 3个小时搞定git》 HEAD/maste指向

  • 每次提交,master分支都会向前进一步。

《Git指南 - 3个小时搞定git》 maste分支移动

  • 当我们创建一个分支dev时,Git会创建一个新的指针devdev指针会指向master相同的提交版本节点,而HEAD也会指向 dev分支上,即当前版本是dev上的当前最新版本。
  • 创建dev分支,并切换到该分支

git branch dev //创建分支
git checkout dev // 切换分支

git checkout -b dev //创建并切换分支

《Git指南 - 3个小时搞定git》 创建dev分支

  • 当我们创建分支并切换到该分支后,Git会将HEAD指向所创建的分支dev上,从而我们以后再提交时,master分支的指针将不会改变,而dev分支的指针会向前移动。

《Git指南 - 3个小时搞定git》 dev指针移动

  • 当然有创建就会有合并, 在dev上的工作做完后,就可以把dev分支和master分支合并,合并也非常简单,只需要将master指向dev的当前提交即可。合并之后,HEAD会指向master分支。
  • 合并分支

git merge dev //快速模式合并,直接将当前所处分支指针指向dev的当前提交版本。

《Git指南 - 3个小时搞定git》 分支合并

  • 最后在合并之后也是可以把dev指针给删除掉。
  • 分支删除

git branch -d dev //删除dev分支

当前分支在没有提交的情况下删除使用

git branch -D dev

解决合并冲突

当然咯,在现实情况下,多多少少还是会出现在merge的时候出现冲突的,即同一个文件在两个分支中都被修改了,在合并时使用快速合并模式*就会产生冲突。

《Git指南 - 3个小时搞定git》 merge冲突发生

打开冲突的文件,Git会用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们可以对其修改后继续提交。

  • <<<<<<<和 ======= 之间是我们做的修改
  • ======= 和 >>>>>>>之间是我们要合并的那个分支做的修改

《Git指南 - 3个小时搞定git》 冲突文件

分支管理策略

在合并时,Git会默认使用Fast forward(快速合并模式),在这种模式下,当我们删除分支后,相应的分支信息也会被删除。

如果要强制禁用Fast forward模式,在merge时Git就会生成一个新的commit,这样,我们就可以从分支历史上看到这条提交记录

实战:在dev分支对文件readme.txt修改,add,commit后,切换到master分支对readme.txt修改,add,commit后使用:

git merge --no-ff -m'提交信息' dev

这样就会产生一个新的commit,而且当前分支的修改会被merge的分支覆盖,使用带参数的git log查看分支历史

git log --graph --pretty=oneline --abbrev-commit

《Git指南 - 3个小时搞定git》 查看分支历史

1)BUG分支

在实际的开发过程中,我们需要去修复一个bug时,我们一般都会去创创建一个issue分支去修复这个bug,所以我们会把当前的工作现场存储起来。

  • 将当前工作现场隐藏

git stash

  • bug处理完成,删除issue分支
  • 查看stash内的工作现场

git stash list


![查看所有工作现场](http://upload-images.jianshu.io/upload_images/3126293-95ca7c934eee9210.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 恢复指定现场

git stash apply stash@{0} //恢复现场
git stash drop stash@{0} //删除stash内的stash@{0}工作区

git stash pop stash@{0} //恢复现场并删除stash@{0}工作区


#### 9 多人协作
***
当我们从远程仓库克隆时,Git会自动的将本地的master分支和远程的master分支关联起来,远程仓库的默认地址是origin。
可以使用`git remote`来查看远程仓库信息

用`git remote -v`查看抓取和推送的master地址
**1) 推送分支**

git push origin master


**2)抓取分支**
Ⅰ 使用`git push origin branch_name`推送自己的修改
Ⅱ 若推送失败,则使用`git pull`试图合并
Ⅲ 如果出现冲突,那么就解决冲突,并在本地提交
Ⅳ没有冲突或解决掉冲突后继续执行 Ⅰ
#### 10 标签管理
***
在发布一个版本时,我们一般会再该版本上添加一个版本号做标识。这样我们在版本库中查询时也可以一目了然。
- 给当前分支创建标签

git tag

- 给历史提交记录创建标签

git tag 历史版本号 //(版本号用git reflog查询)

- 创建标签时填加备注信息

git tag -a -m &#8216;remark&#8217;

- 查看标签信息

git show

- 查看所有标签

git tag

***
- 删除标签

git tag -d

- 推送标签到远程

git push origin //推送单个标签
git push origin &#8211;tags //将全部未推送的的标签推送到远程

- 删除远程标签
- 先删除本地标签
- 再删除远程标签

git push origin :refs/tags/


#### 11 补充
***
- 把本地的分支提交到远程的某个分支(远程分支可以是未创建的)

git push origin own_branch:remote_branch

- 删除远程的分支

git push origin :remote_test //远程的分支被删除,本地的分支不会被删除

- 将一个文件从暂存区中删掉,但还存在与硬盘中

git rm &#8211;cache fileName

- 撤销上一次提交。

&#8211;soft 参数:将上一次的修改放入 staging area
&#8211;mixed 参数:将上一次的修改放入 working directory
&#8211;hard 参数:直接将上一次的修改抛弃

![image.png](http://upload-images.jianshu.io/upload_images/3126293-de192a11c0798478.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 查看远端仓库

git remote -v


- 拉取远程分支到本地分支

git pull origin remote : local


- 推送本地分支到远程分支

git push origin local : remote


- 查看某个文件的修改人

git blame fileName


- 获取远程的修改,但并不合并到当前分支

git fetch branchName


- 撤销当前的commit

git revert [HEAD]

> 这样整个git基础就完结了。由于笔者也是刚刚接触git不久,所以文中有不足的地方望大家多多指正&#x1f600;

推荐阅读
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 本文介绍了如何将PPT格式转换成PDF,并推荐了一款高效的PPT转换成PDF转换器。该转换器利用最新的超线程技术核心和多核心CPU性能,提高了转换效率和转换质量。同时,该转换器具备万能转换模式,可以轻松实现不同类型、不同内容和不同排版的PPT文件的转换。用户可以通过下载链接获取该转换器。 ... [详细]
  • 本文分享了一位Android开发者多年来对于Android开发所需掌握的技能的笔记,包括架构师基础、高级UI开源框架、Android Framework开发、性能优化、音视频精编源码解析、Flutter学习进阶、微信小程序开发以及百大框架源码解读等方面的知识。文章强调了技术栈和布局的重要性,鼓励开发者做好学习规划和技术布局,以提升自己的竞争力和市场价值。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
author-avatar
G眯眼猫2850927647Ona
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有