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

微信公众号: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工作流程
c6a7d8eae1cac1881395abc6bd6403e9.png
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,并在其中添加三个文件*

8061fe0d92111d2c3269c030f80647c0.png

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

10771ca77ffb73548adfdccd60303f91.png

*3. Git Bash的界面如下*

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

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

f0f3163c3928cee38f2cd5902f4cd071.png
需要注意图中斜杠的方向

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

4c9a72a1adb75536851afc6e295f9ece.png

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

e8dd0fa431ede00981ed3c541173a5d3.png

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

10d3353d8aeaebd5943eb411690ff05e.png

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

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

283bcfbf4993bc5963001ca5918b14ff.png

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

67fcb5a0685dc2b376805479e5674c7d.png

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

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

0bc51f5a6aee4102a659369bbf33f42e.png

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

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

cd03e0b27ec080d4d18acf8eb347cfd6.png

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

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

touch .gitignore
9e5ecd129ad8ea11c28e7bcc5e7a362b.png
1a59b3be4e26c057ddbff456892c3673.png

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

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

e7d25afd6e0e2fd426a2f0cc92fe9173.png

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

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

git rm --cached *.txt
3c49d8541539760cfd1ed089c0f9aa97.png

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

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

00e87f08bdd2e996e2c11b36d0c84b0b.png

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

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

现在可以提交了
15d0ab71f3bc6ba419ce1ee33495e67a.png

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

aebd7f900c9e732f002d1d21408c1e2e.png

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

41cdf764ac3cc40d0758d283196aeb66.png

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

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

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

7dfbffc724eeb25dc5a4ce4e6310e2b4.png
开始的时候这里面没有任何内容

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

3b5dcd2ba42d28b69a8d1f95ca319330.png

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

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

83b4c141f336b222d10177728b292d43.png

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

a38d4abf9173aadb53d094e9764baf59.png

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

29d6de18680c1c70c2f1017629dc3584.png
81efeddd0724bb7431a9faaf1702951e.png

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

a649e0bd2bf7e8c3ea4fd80777ba88ff.png

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

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

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

d9dc01917d993d1ffc106c414e1a35c7.png

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

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

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

3721bf5e76aa4f83de2506fee7a7c509.png

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

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

f2a6f82fc0deaccf96af8b0f4253ae0e.png

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

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

0833ff044e882eb7c1a049e3c172a765.png

此时打开FackThesis1.docx文件看一看
79911acac14d4a14a4686d221a151b4c.png

你看,又回来了。

累死我了


分支 Branch

什么是分支

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


操作命令
  • git branch :显示所有分支

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

  • git checkout 分支名 : 切换分支

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

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

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

远程仓库

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

常用的两个Git代码托管平台
  • GitHub 国外的,慢

  • 码云 国内的,快


操作步骤

以码云为例

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

    aeb88e41fe90a70cde0a9c2ae9764d06.png
    点击新建仓库
    cdf11810c93e83af8f93c5f9aec99016.png
    写上仓库名后直接创建
    8f9871cf42182815351fdd7d9d958cf5.png
    复制仓库地址
  2. 添加远程仓库的地址

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

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

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

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

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

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

    bc3ab2dc46b18ec73ad9b2299c19371e.png
  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一下(可能是下期,或者是下下期推送的内容)
对数组的系列操作的递归实现

a881fdae0ddd89fea3f8aa41fc322d46.png

bd9a7bfdad142ae5bd63eafa3491163e.png
中国加油,疫情快快好起来把
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值