微信公众号:MitchHong
作者:Mitch Hong
微信号:ASparkleSubscription;

目录

前言Git简介GitGit工作流程Git安装Git如何使用初始化常用命令git中的文件状态忽略文件例子分支 Branch什么是分支操作命令远程仓库常用的两个Git代码托管平台操作步骤操作命令

前言

啊,一看这标题我就心痛!故事如下,可略过

最近这两个月,一直在学习Linux,前几天在看其文件系统管理部分的分配swap分区。我之前在安装Linux系统时给swap分配了我内存4倍的容量(24个G),我感觉太大了,正好又在学分配swap分区,就顺手把这个swap分区给删了,又在这上面重新分了2个G出来想作为我新的swap分区的大小,剩下的想扩容给根分区,然后就去改了/etc/fstab文件(直接把其中的swap那行删了),然后reboot,然后我就只能输入root的密码进入修复模式,只可惜现在我怎么也不能把哪个/etc/fstab文件变回原来的了,也就没法再进入家目录中了,只能重装系统了。而我这一大段时间内做的笔记和一些代码都放在装Linux的电脑上,没用Windows的电脑来学习,所以一切都消失的连灰都没了[哭唧唧脸]。

于是我就下定决心花了半天的时间学习了如何使用git(早晚都要学,只不过是提上日程了),遂,整理此篇推送(第一次用MarkDown,感觉挺好看)。

Git简介

Git

Git是一个开源的分布式版本控制系统(Version Control System, VCS),它包含一组命令,用来对项目进行版本的控制和管理。


Git工作流程

git工作流程

如上图所示:
先不看远程仓库,当我们就在本地自己的电脑中开始创建项目时,这个项目文件夹就叫本地仓库工作区就在这个项目文件夹中。这个项目文件夹就好比是一个大仓库,项目文件夹中的文件就是仓库中的东西,我们可能在对其中的一个东西(文件)进行工作,也可能在对其中的多个文件进行工作,反正这个工作区域就是这个本地仓库中的一个小地方。当我们对项目文件夹中的文件进行修改后或者是向项目文件夹中添加新的文件后,并非立马提交,而是先添加到一个叫做暂存区的地方,然后再由暂存区提交到本地仓库中。

当我们完成项目的一个阶段后便可以从本地仓库中把已经做好的内容提交到远程仓库中,这样他人便可以从你的这个远程仓库中把项目拉取到他的电脑中。

如果我们要用远程仓库来更新本地仓库(往往一个项目不是一个人完成的,团队的其他成员可能向远程仓库推送了你本地仓库没有的内容)就需要从远程仓库中抓取下来进行合并。

如果我是中途插进来的队员,本地仓库中并没有项目,这时就需要从远程仓库中克隆项目下来。


Git安装

Linux和Mac中都自带,Windows要自己下载安装。我不知道什么时候在我的电脑中安装了Git,所以这里就不说安装过程了。

Git如何使用

初始化

每一个项目文件夹下都需要进行git的初始化配置,初始化git使用者的名字和邮箱:

git config --global user.name "你的名字"git config --global user.email "你的邮箱"

比如

git config --global user.name "Mitch Hong"git config --global user.email "xxxxxxxx@outlook.com"

常用命令

  1. git init :初始化本地git仓库(项目)。它会在当前目录中创建一个.git目录,用于记录所有版本变更的信息

  2. git add 文件路径 :将文件添加到暂存区交由git托管。可用-A, --all, 或. 来替代文件路径这表示将添加所有除.gitignore文件中指定的文件外的文件到暂存区中,其实就是不添加.gitignore中指定的文件。另外,可使用*来进行匹配

  3. git commit -m "本次更改的信息" :暂存区中的文件提交到本地仓库!每次提交都要写上本次修改的内容。

  4. git status :查看本地仓库的文件状态

  5. git log :查看提交日志

  6. git reset --hard 版本id :回退到指定的版本,这个命令会打印一个结果出来,其中的HEAD表示当前的版本

  7. git reflog :查看所有的操作记录,包括被回退的版本id, reset操作等!

  8. git rm [-r] --cached 文件或文件夹名 :如果是文件夹则需要添加 -r,如果是文件则不用。这个命令是把文件或文件夹从托管命令中移除,因为我们有时候可能会手误,把一些不需要托管的文件也添加进去了。


git中的文件状态

  • Untracked: 未跟踪,表示文件不受git管理,一般新建的文件处于该状态,Untracked files!

  • Staged: 已暂存,表示已经对修改的文件做了标记,实际上就是在暂存区中的文件,即经过git add 后的那些文件。Changes to be commited!

  • Commited: 已提交,表示文件已经被提交到了本地仓库中了。即经过了 git commit后的那些文件而且没有被再次修改。如果commit之后又被修改了,则是下面的这种状态。

  • Modified: 已修改,表示文件内容已经被修改了,但是还没有再次使用 git add提交到暂存区,就是已经提交了,但却被再次修改了的那些文件。Changes not staged for commit!


忽略文件

有的文件是完全不需要记录它的版本的,比如matlab中扽.asv文件,当你编辑一个文件时就会自动出现这个文件来同步你对原来的m文件的修改,这样便可以在电脑突然死机后还原回去。一般在正常关闭m文件后这个asv文件会自动删除,但有的时候就没有自动删除,所以我们可以把 *.asv 写入到忽略文件中。

可以在项目文件夹下创建一个名为 .gitignore的文件,在这个文件中指定哪些文件需要被忽略。这个文件中的一行只能指定一个文件,其中以 # 开头的行为注释行。文件名不能打错,必须是 .gitignore 。


例子

*1. 如下图所示先创建一个项目文件夹名为FakeThesis,并在其中添加三个文件*


*2. 打开所下载的Git中的Git Bash*


*3. Git Bash的界面如下*

Bash是Linux中的Shell,所以用法和Linux一样

*4. 首先利用 cd 命令切换到我们的项目文件夹中*

需要注意图中斜杠的方向

*5. 使用git init命令来初始化本地git仓库*在此之前别忘了使用 git config来初始化name和email


现在看一下我们的项目文件夹


*6. 使用git status命令,查看一下本地仓库中文件的状态*


可以发现这三个文件的状态都是Untracked,正如上面所说的,因为这三个文件是新添加的

*7. 使用git add命令,把Untracked文件添加到暂存区*


*8. 再使用git status命令,查看一下本地仓库中文件的状态*


上面说Changes to be committed,这便是上面所说的保存在暂存区中的文件,接下来我们向本地仓库中提交

*9. 使用git commit命令,把暂存区中的文件添加到本地仓库*


如果直接git commit就回车,此时会进入vim中,编辑提交的信息,编辑完成后先按ESC建,在输入 :qw 这三个字符才能退出。

*10. 再使用git status命令,查看一下本地仓库中文件的状态*


可以看出我们没有东西提交了,这便是提交到本地的整个流程。接下来再进行进一步的操作!

*11. 使用touch命令,新建 .gitignore文件*

touch .gitignore


现在你用记事本编辑这个文件也行,用vim编辑这个文件也行,下面我就用vim编辑这个文件,在其中添加 *.txt 表示忽略所有的文本文件。

*12. vim .gitignore* 回车之后按 I键 进入插入模式 输入如下图中的内容


输完后按 ESC建退出输入模式,按 :wq 这三个字符退出 vim。

*13. 前面手误,把文本文件也加入托管了,现在把文本文件从托管中移除*

git rm --cached *.txt

我这里使用了通配符 * 表示把所有的txt文件从托管中移除

*14. 再使用git status命令,查看一下本地仓库中文件的状态*


可以看到Untrackedfile中没有那个文本文件了,不过因为它被我们从托管中移除了,还没确认,所以还需要再确认一下才行,不过我们还是先把这个忽略文件添加到暂存区中后再一块确认


你看看它这里都提示了这个文本文件被忽略了
我们还是再看一下文件的状态


现在可以提交了


*15. 现在再在项目文件夹中新建一个word文档和一个文本文件*


*16. 使用git status命令,查看一下本地仓库中文件的状态*


你看,现在它把txt文件给忽略了吧,提示了这个word文档没被跟踪。


下面我们来试试版本的回退操作

*17. 先手动修改(添加)一下FackThesis1.docx中的内容*

开始的时候这里面没有任何内容

*18. 使用git status命令,查看一下本地仓库中文件的状态*


可以看到,我刚刚修改的FackThesis1.docx文件被标记为modified了,还有刚刚上面新添加的文件没有加到暂存区中。

*19. 把新文件添加到暂存区,再commit*


*20. 再修改(添加)一下FackThesis1.docx中的内容*


*21. 使用git status命令,查看一下本地仓库中文件的状态,然后添加并提交*




*22. 使用 git log 查看所做过的操作*


其中commit后面的那一长串就是我们的版本id

利用这个版本id便可以进行版本的回退,即回到之前的版本。

*23. 回退到第一次提交时的版本*


现在打开之前修改果两次的FackThesis1.docx文件看一看


可以发现这个文件中的内容为空,确实,第一次提交的时候,这个文件中还没有写如任何东西

*24. 再使用 git log 查看所做过的操作*


可以发现,回退到第一次提交的版本后,后面的所有版本都没了,这可咋整,别急,还有git reflog命令可用。

*25. 使用 git reflog 查看所有的操作记录*


HEAD前面的那7个字符是对应的版本id的简写,这里面包括了所有的版本id

*23. 再回退到第四次提交时的版本*


此时打开FackThesis1.docx文件看一看


你看,又回来了。


累死我了


分支 Branch

什么是分支

分支就是再版本上的更新迭代,比如我一个Matlab程序,可以做成GUI版本的,也可以做成非GUI版本的,这就是两个分支,这两个分支都需要的部分叫做master,可以理解为它两都需要的那部分基础代码,这两个分支是在这个基础代码上的发展


操作命令

  • git branch :显示所有分支

  • git branch 分支名 : 创建一个新分支

  • git checkout 分支名 : 切换分支

  • git branch -d 分支名 :删除本地分支

  • git push origin --delete 分支名 :删除远程分支

具体使用写不动了,读者自己试试

远程仓库

把本地git仓库推送到远程仓库中,这样其他人就能从远程仓库上把你的项目拉取下来

常用的两个Git代码托管平台

  • GitHub 国外的,慢

  • 码云 国内的,快


操作步骤

以码云为例

  1. 注册码云的账号,在里面找到创建仓库

    点击新建仓库

    写上仓库名后直接创建

    复制仓库地址
  2. 添加远程仓库的地址

    其中的origin是仓库地址的别名,这样就可以用origin来代替这个仓库地址了,省事
  3. 把本地仓库推送到远程仓库


  4. 现在可以取码云上看到我提交的内容了

    由于我在上面设置成私有了,所以别人是搜不到我的这个项目的
  5. 如何从远程仓库中拉取到本地,从而更新本地的仓库

    如果远程仓库中有改动,拉取下来会进行合并,如果有冲突时需要手动合并

操作命令

  1. git remote add 仓库别名 远程仓库地址 :把远程仓库的地址添加到本地仓库,这样本地仓库才知道上传到哪里去,仓库别名可以自己随便写,但是一般都用origin,这样以后就可以用origin来代替那一大长串的远程仓库地址了。

  2. git remote -v :产看远程仓库的地址信息,如果存在的话会返回两条同样的地址,只不过一条专门用来fetch抓取,一条专门用来push推送


  3. git remote rm 远程仓库地址的别名(origin) :用于把远程仓库的地址从本地仓库中删除

  4. git push 远程仓库地址的别名 分支名 :用于把本地仓库的指定分支推送到远程仓库的同名分支中,如果远程仓库中不存在该分支,则自动新建一个该分支

  5. git pull 远程仓库别名 分支名 :用于从远程仓库指定分支中拉取(更新)新的数据到本地进行合并。

  6. git clone 远程仓库的地址 :用于克隆远程仓库(项目)到本地,也就是从上面下载项目

Note:

  • git push 远程仓库地址的别名 分支名;要输入账户名与密码,自己的仓库只有自己才能放东西进去(除非你给这个项目设置了组员)。

  • 当你远程仓库中出现了新的文件,或有文件被改了,那么你想再把项目推送到远程仓库中需要先拉取(pull)下来对本地仓库进行更新,这更新可能会出现冲突,出现冲突时需要手动去合并。只有在拉取后才能进行推送到远程仓库。

  • git clone与git pull的区别:clone是在没有本地仓库时,将远端的整个项目下载下来时使用;而pull是在本地有仓库时,将远程仓库中的数据更新过来与本地的进行合并时使用。也就是说只有在本地没有这个仓库时我们才需要克隆,以后都是pull来更新本地的仓库。


至于示例,已经在上面的操作步骤中演示了。主要还是前面本地的那一系列操作,后面推送到远端挺简单的。累死我了,从下午15点多连续写到现在23点40多没怎么停。


如果觉得本文帮助到您了的话,麻烦给下面这个项目star一下(可能是下期,或者是下下期推送的内容)
对数组的系列操作的递归实现



中国加油,疫情快快好起来把

.git文件夹_关于Git使用的(吐血)整理再也不用担心因为电脑故障而失去自己辛苦写下的论文或代码...相关推荐

  1. add多个文件 git 文件夹_利用 git 提取文件夹下多个特定文件里的内容写到特定文件内...

    有些时候我们需要将一个或多个文件夹内的特定文件里的内容读写到指定的文件内,如果是一个一个文件复制速度太慢,这时我们可以利用git来操作. 首先打开我们需要读取的文件的上级文件夹,在空白处右击选择[Gi ...

  2. .git文件夹_将Git存储库中的文件夹转换为全新的存储库

    前提 如果您创建存储库的新克隆,则在将文件夹拆分到单独的存储库时,不会丢失任何Git历史记录或更改. 步骤 打开终端. 将当前工作目录更改为要创建新存储库的位置. 克隆包含子文件夹的存储库. $ gi ...

  3. .git文件夹_如何使用git把本地代码上传(更新)到github上

    什么是git?git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.git是一种工具,它能更好的让我们管理代码.很多时候如果我们需要保持本地代码和github代码版本 ...

  4. bat 复制文件夹_一个神奇的bat批处理文件,更好的隐藏电脑里的文件或者文件夹...

    在之前和大家分享了如何隐藏电脑上不希望别人看到的文件或者文件夹,具体的分享了两种方法: 1.利用文件或者文件夹本身的隐藏属性进行隐藏文件或者文件夹,此方法很简单但是隐藏的文件很容易被找到! 2.通过c ...

  5. commit git 删除文件夹_从Git提交中删除文件

    现有的答案都在谈论从上一次提交中删除不需要的文件. 如果要从旧提交(甚至推送)中删除不需要的文件,并且不想创建新提交,则由于该操作,这是不必要的: 1. 查找您要文件符合的提交. git checko ...

  6. 苹果手机悬浮窗怎么打开_怎么通过悬浮窗录音?再也不用担心文本被遮挡

    怎么通过悬浮窗录音?在录音的时候经常遇到这种情况,打开了录音软件,录音软件就遮挡了要录制的文本,将文本缩小看起来又很不方便.在生活中,这种情况其实很普遍,主要是因为录音软件没有选择好. 在浏览器搜索& ...

  7. java悬浮窗锁定_怎么通过悬浮窗录音?再也不用担心文本被遮挡!

    怎么通过悬浮窗录音?在录音的时候经常遇到这种情况,打开了录音软件,录音软件就遮挡了要录制的文本,将文本缩小看起来又很不方便.在生活中,这种情况其实很普遍,主要是因为录音软件没有选择好. 在浏览器搜索& ...

  8. git clone 只有.git文件夹 git status后发现文件夹全都被删除了

    近期在拉代码的时候,发现了个问题,拉下来的代码一致都报错,然后只有一个.git文件夹,使用git status发现,所有的文件都被删除了,根据系统提示的 **git restore --source= ...

  9. git add 文件夹_软件测试学习资源—Git 基础使用

    环境准备: 操作系统: Win7 旗舰版 64位 Git:自官网下载2.22 Windows版本,默认安装 任意位置新建一个空白文件夹:d:/B03_Git 在该文件夹中点击鼠标右键,选择" ...

最新文章

  1. win服务器是如何发展到现在的?
  2. python链表的创建_python数据结构之链表的实例讲解
  3. 1D/1D动态规划的三种优化方法
  4. 前端性能优化之Lazyload
  5. 实战分享:activemq 在灾备双活建设中的研究
  6. 坐等价格!小米Civi今日下午发布:女性用户青睐之选
  7. scala学习-scala中的特殊符号使用
  8. Docker 的出现
  9. 制造业悖论 -- 一些难解而又必须解的问题
  10. 全新UI多用户任务悬赏系统源码+带三级分销推广
  11. 【Java】NIO 仿照zookeeper 写的 nio客户端
  12. 网络工程师知识-盘点网工调试工具常用console线汇总
  13. java枚举构造器_java枚举类的构造函数实例详解
  14. 谈谈EOS的出块时间,不可逆时间,BFT
  15. 如何正确书写正则表达式
  16. 51单片机数字时钟套件 DIY散件
  17. js实现点击按钮,弹出新窗口
  18. 字符串查找函数和错误信息报告函数
  19. 魅族2014发布会简单总结
  20. 看点直播抓取视频回放链接

热门文章

  1. SAMBA多用户共享
  2. android创建相册代码,Android Studio中用List Fragments创建相册Gallery
  3. 多商户商城系统开发功能有哪些?
  4. 香港中文大学深圳(CUHKSZ)2020fall数据科学硕士申请及笔面经
  5. 《人工智能》之《计算智能》
  6. ACID(事务四大特性)
  7. 关于mysql时间比较 -- date和datetime
  8. easyui datagrid 显示未知结构的数据
  9. 评定成绩级别和查询学生成绩
  10. 2019年_BATJ大厂面试题总结-阿里篇