【git】基础内容(git 基础)

网友投稿 745 2022-05-30

分布式版本控制 Git

版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

Git是分布式版本控制系统,分布式特点:没有中央服务器,每个人的电脑就是一个完整的版本库。Git是免费、开源的,最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper!

git优点:

实现跨区域多人协同开发

追踪和记载一个或者多个文件的历史记录

【git】基础内容(git 基础)

组织和保护你的源代码和文档

统计工作量

并行开发、提高开发效率

跟踪记录整个软件的开发过程

由于没有中央服务器,每个人的电脑就是一个完整的版本库,不会因为服务器损坏或者网络问题,造成不能工作的情况

适合分布式开发,强调个体。

任意两个开发者之间可以很容易的解决冲突。

git缺点:

代码保密性差,每个人都拥有全部的代码!

所有版本信息仓库全部同步到本地的每个用户,增加了本地存储空间的占用。

模式上比SVN更加复杂。

Git=“饭桶”?

我们都知道,Linux 内核开源项目有着为数众广的参与者。整个项目组开始的时候启用一个分布式版本控制系统 BitKeeper 来管理和维护代码。本来BitKeeper 用的好好的,后来BitKeeper公司怀疑Linux社区中一些大佬在搞逆向工程,企图破解 BitKeeper !他们就收回了给Linux开发者的免费授权,于是Linus不得不自己写了一个分布式版本控制系统,还给它起名git。

小伙伴们可以想象有人开发一款软件,并且给它起名“傻逼”或者“饭桶”的场景么。

Git环境配置

软件下载

打开 [git官网] https://git-scm.com/,下载git对应操作系统的版本。

官网下载太慢,我们可以使用淘宝镜像下载:http://npm.taobao.org/mirrors/git-for-windows/

下载对应的版本即可安装!

Windows安装:傻瓜式点击下一步(更改一下安装目录),倘若还有问题的话,在【Hexo】笔记01:安装Hexo-云社区-华为云 中有详解

Liunx安装

1、如果你碰巧用Debian或Ubuntu Linux,通过一条sudo apt-get install git就可以直接完成Git的安装,非常简单。

2、老一点的Debian或Ubuntu Linux,要把命令改为sudo apt-get install git-core,因为以前有个软件也叫GIT(GNU Interactive Tools),结果Git就只能叫git-core了。由于Git名气实在太大,后来就把GNU Interactive Tools改成gnuit,git-core正式改为git。

3、如果是其他Linux版本,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./config,make,sudo make install这几个命令安装就好了。

软件卸载

打开系统属性

打开系统设置

打开环境变量

删除Path

删除git环境后再进行软件卸载

启动Git

安装成功后在开始菜单中会有Git项

任意文件夹下右键也可以看到对应的git

Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多

Git CMD:Windows风格的命令行

Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

常用的Linux命令

1)、cd : (change directory)改变目录。

2)、cd . . 回退到上一个目录,直接cd进入默认目录

3)、pwd : 显示当前所在的目录路径。

4)、ls(ll): 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。

5)、touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。

6)、rm: (remove)删除一个文件, rm index.js 就会把index.js文件删除。

7)、mkdir: (make directory)新建一个目录,就是新建一个文件夹。

8)、rm -r : 删除一个文件夹, 例如:rm -r src 删除src目录

rm -rf / 切勿在Linux中尝试!f递归 /代表根目录,直接格式化所有文件!!

9)、mv :(move)移动文件,

mv index.html src

index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。

10)、reset 重新初始化终端/清屏。

11)、clear 清屏。

12)、history 查看命令历史。

13)、help 帮助。

14)、exit 退出。

15)、#表示注释

Git配置

所有的配置文件,其实都保存在本地!

查看配置 git config -l

查看不同级别的配置文件:

#查看系统config git config --system --list #查看当前用户(global)配置 git config --global --list #查看当前仓库配置信息 git config --local --list

Git相关的配置文件:

1)、Git\etc\gitconfig :Git 安装目录下的 gitconfig --system 系统级

2)、C:\Users\Administrator\ .gitconfig : 只适用于当前登录用户的配置 --global 全局

3)、当前文件夹\.git\config :查看当前仓库配置信息

设置用户名与邮箱(必须的用户标识)

当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:

git config --global user.name "LongYorke" #名称

git config --global user.email xxxxxxxxxx@qq.com #邮箱

只需要做一次这个设置,如果你传递了--global 选项,因为Git将总是会使用该信息来处理你在系统中所做的一切操作。

如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global选项。

总之--global为全局配置,不加为某个项目的特定配置。

Git基本理论

四个区域

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:

Workspace:工作区,就是你平时存放项目代码的地方

Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息。就像我们去购物一样,先把东西放到购物车Index / Stage,去结账没问题后放到家里Repository

Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

git仓库中HEAD指向本地的仓库区内当前的开发分支,默认主分支master

文件的四种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !

Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

下图描述了文件状态、三个区域(本地)、部分命令关联部分

git status [filename] :查看指定文件状态

git status:查看所有文件状态

git diff:比较文件的不同,即暂存区和工作区的差异。

git log:查看历史提交记录

黑色:

git add .:暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

git commit -m “1.0.0”:将本地修改过的文件提交到本地库中,并有提交信息1.0.0,master 分支会做相应的更新。

git rm --cached :会直接从暂存区index/stage删除文件,工作区则不做出改变。

红色:

git reset HEAD :暂存区index/stage的目录树会被respository重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

绿色:

git checkout . 或者 git checkout -- :,会用暂存区index/stage全部或指定的文件覆盖工作区的文件。这个操作会清除工作区中未添加到暂存区的改动。

git checkout HEAD . 或者 git checkout HEAD :会用 HEAD 指向的 master 分支中的全部或者部分文件覆盖暂存区和以及工作区中的文件。这个命令不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

如果再讨论远程仓库:

git push:是将本地库中的最新信息发送给远程库;

git pull:是从远程获取最新版本到本地,并自动merge;

git fetch:是从远程获取最新版本到本地,不会自动merge;

git merge:是用于从指定的commit(s)合并到当前分支,用来合并两个分支;

加上分支内容:

# 列出所有本地分支和远程分支 $ git branch -a # 新建一个分支,但依然停留在当前分支 $ git branch [branch-name] # 新建一个分支,并切换到该分支 $ git checkout -b [branch] # 新建一个分支,指向指定commit $ git branch [branch] [commit] # 新建一个分支,与指定的远程分支建立追踪关系 $ git branch --track [branch] [remote-branch] # 切换到指定分支,并更新工作区 $ git checkout [branch-name] # 切换到上一个分支 $ git checkout - # 建立追踪关系,在现有分支与指定的远程分支之间 $ git branch --set-upstream [branch] [remote-branch] # 合并指定分支到当前分支 $ git merge [branch] # 选择一个commit,合并进当前分支 $ git cherry-pick [commit] # 删除分支 $ git branch -d [branch-name] # 删除远程分支 $ git push origin --delete [branch-name] $ git branch -dr [remote/branch]

有点晕?那么来一波总结:

1、存储(去的感觉):

git add 工作区->暂存区

git commit -m 暂存区->本地仓库

git commit --amend -m [message] ①如代码无新变化,覆盖上一次commit的提交信息

②如有变,覆盖上一次commit

git push 本地仓库->远程仓库

2、覆盖与删除(回的感觉):

git merge:本地仓库内两个部分合并

git fetch 远程仓库->本地仓库

git pull 相当于 git fetch + git merge。

(有“HEAD” 的从本地仓库开始操作)

git reset HEAD 本地仓库的内容->暂存区 (覆盖)

git reset --hard HEAD 本地仓库的内容->工作区+暂存区(覆盖)

git checkout HEAD 本地仓库的内容->暂存区+工作区(覆盖)

git checkout ①--<文件> 暂存区内容->工作区(覆盖) ②<分支> 切换分支

git rm --cached 暂存区->垃圾桶

git rm [file1] [file2] 工作区->垃圾桶(同时)工作区删除记录->暂存区

3、最开始啥也没有

git init

git clone 远程仓库->本地仓库+暂存区+工作区

4、分支

看下面实际操作过程

工作流程

Gitee、Github 两大代码托管平台,小孩子才做选择,我们都要~

工作流程一般是这样的:

1、使用以下命令生成 SSH Key:

ssh-keygen -t rsa -C "youremail@example.com"

ssh-keygen -t rsa -C "youremail@example.com"

打开id_rsa.pub,复制里面的key。

2、上传自己的 SSH 公钥。

github:

左侧寻到

gitee:

3、添加仓库信息:

github:

gitee:

4、创建仓库

git init

5、 从现有 Git 仓库中拷贝项目,如

git clone git://github.com/xxx/xxx.git

5、本地库上使用命令git remote add把它和 Gitee 的远程库关联:

git remote add origin git@gitee.com:longyorke/LongYorke_test.git

出现该情况说明本地库已经关联了一个名叫 origin 的远程库(做该实验之前我已经关联过了,如果第一次关联是不会fatal的),此时,可以先用git remote -v查看远程库信息:

git remote -v

可以看到,本地库已经关联了 origin 的远程库,并且,该远程库指向 Gitee。

我们可以删除已有的 Gitee 远程库:

git remote rm origin

重新关联远程库:git 给远程库起的默认名称是 origin,如果有多个远程库,我们需要用不同的名称来标识不同的远程库。

git remote add github git@github.com:LongYorke/long-yorke_music.git

git remote add gitee git@gitee.com:LongYorke/long-yorke_music.git

此刻,远程库名字不再是 origin,而是我们设置的github与gitee

$ git remote -v gitee git@gitee.com:longyorke/long-yorke_music.git (fetch) gitee git@gitee.com:longyorke/long-yorke_music.git (push) github git@github.com:Longyorke/LongYorke_music.git (fetch) github git@github.com:Longyorke/LongYorke_music.git (push)

6、有了修改的变化后,瞅一下文件状态

git status

7、将工作区的文件提交到暂存区域。

git add .

8、将暂存区域的文件提交到本地仓库。

git commit -m '初始化项目版本'

9、如果要推送到 GitHub,使用命令:

git push github master

如果要推送到 Gitee,使用命令:

git push gitee master

10、分支管理

创建一个dev分支用于测试开发,master分支用于稳定版存储

git branch dev

观察分支

git branch

切换分支命令:

git checkout dev

合并分支命令:

出于dev分支时,将material合并进入dev分支

git merge master

删除dev分支命令:

git branch -d dev

11、恢复

git中把commit删了后,并不是真正的删除,而是变成了悬空对象(dangling commit)。我们只要把把这悬空对象(dangling commit)找出来。

1)用git reset --hard HEAD 覆盖后

2)找到悬空对象

git fsck --lost-found dangling commit xxx

3)用合并命令进行恢复:

git merge xxx

12、强制覆盖远程分支

然后用这个

git push -u 我们起的主机名字 本地分支 -f

强制覆盖已有远程的分支

此外还有Git 查看提交历史、Git 标签等内容

可以进入gitee官网了解更全面的内容

Git 仓库基础操作 - Gitee.com

可以进入git官网学习更全面的知识

Git - 关于版本控制

Git Linux

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:HTTP五大类标准状态码一网打尽
下一篇:【2020华为云AI实战营】物体检测作业分享
相关文章