IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Linux之git -> 正文阅读

[开发工具]Linux之git

简介

git就是一个很方便管理各种代码版本的一个工具,它是用一个树结构,来管理我们所有的历史版本,就是从一个最原始的起点开始,然后每一个节点都代表一个代码的版本,然后每一个节点都可以同时扩展很多个分支,我们也可以快速实现不同分支之间相互合并的操作,同时我们也可以很容易得实现回滚操作。比如我们想把我们的代码恢复到某一个历史版本,某一个节点,我们就可以用一个命令直接恢复到那个节点。

所以git就相当于是将代码非常多的历史版本,用一棵树得形式维护出来,每一次修改都会在当前的节点之下去创建一个新的节点,它会把所有的历史记录都存下来,而且支持多分枝,多分枝的话,大家就可以相互之间协同合作了,我们自己开发项目的时候,一般一两个分支就够了,主要用来回顾历史版本。

比如过了一年之后,不太清楚当初的写作历程是什么了,这时候就可以回顾一下,然后一个命令回滚到历史版本。
如果是多个人合作的话,可以利用云平台,多个人合作需要一个云平台同步代码,大家可以将一个git的仓库(一个版本控制的仓库)放到云端,然后每个同学每次修改的时候,从云端把最新的项目拉下来,然后每次开个分支来写,然后写完之后再合并到一起。

所以git最主要的就是一个版本管理的工具,而且是可持久化的,支持多人合作。

git基本概念

从本地看git的时候,其实就是一个文件夹,工作区就是这个文件夹,也就是当前的工作目录,而且工作区是和分支是独立的,也就是不管是在哪个分支里面,工作区都是同一个
工作区:仓库的目录。工作区是独立于各个分支的。

暂存区:就是暂存区和工作库之间的桥梁,数据暂时存放的区域,类似于工作区写入版本库前的缓存区。暂存区是独立于各个分支的。我们要每一次将工作区存入到我们的版本库里,存成某一个节点,我们存的时候不会直接存,会先放到暂存区里,每次往暂存区里放一点,然后最后要存的时候,是将暂存区整体放到版本库里

版本结构就是一个树的结构,每个点代表一个历史版本,是一个从根节点开始的有向树,这个树里还有一个指针的概念,就是HEAD,可以认为是头指针,这个指针每次都只会位于其中一个节点
在这里插入图片描述

举个例子:
如何将一个新的版本放到历史库里面:

在工作区来写,写一点放一点,然后将我们当前版本里面所有的文件放到暂存区之后,然后每次我们要将当前工作区存到版本库里的时候,在HEAD 节点后面创建一个新的节点,然后将暂存区里的所有内容放到我们新的节点里面,同时将我们的HEAD,往后移一位

版本库:将所有的版本用一颗树存下来,这就是版本库。存放所有已经提交到本地仓库的代码版本
版本结构:树结构,树中每个节点代表一个代码版本。

常用命令

本地

先设置自己的名字和邮箱

git config --global user.name xxx

设置全局用户名,信息记录在~/.gitconfig文件中

git config --global user.email xxx@xxx.com

设置全局邮箱地址,信息记录在~/.gitconfig文件中

创建git

git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中

添加到缓存区

git add XX:将XX文件添加到暂存区
git add .:将所有待加入暂存区的文件加入暂存区

git add 感觉可以理解为将操作存下来
这里的git add 并不一定增加或者修改了文件,也可以是删除了文件,就比如
在这里插入图片描述
这样就是把

删除文件

git并不一定非要管理文件夹里的文件

git rm --cached XX:将文件从仓库索引目录中删掉 ,不去管理XX文件,不希望管理某个我文件的话,可以把它从管理的文件列表中删除出来
想要加回去的话,就要用git status

git restore --stage XX:这个是还要管理这个文件,只是将文件从暂存区拿出来

持久化

git commit -m “给自己看的备注信息”:将暂存区的内容提交到当前分支(这个节点的名字就是你自己备注的信息)这一步也被成为持久化

这里是把缓存区持久化,如果文件修改了但是没有放到缓存区也不会被持久化

查看仓库状态

git status:查看仓库状态

查看文件和暂存区的不同

git diff XX:查看XX文件相对于暂存区修改了哪些内容

查看历史版本

git log:查看当前分支的所有版本
这个就是从根节点一直到当前节点的路径,但是这个输出的是很多行,从下到上,就是根节点到现在的节点的顺序
如果感觉输出比较乱的话,可以用

git log --pretty=oneline

这个就是每一个输出在一行了

git reflog:查看HEAD指针的移动历史(包括被回滚的版本)

向前回滚

最后加上一个~或者是^,都一样,加一个代表向前回滚一个单位,两个代表回滚俩个单位

git reset --hard HEAD^ 或 git reset --hard HEAD~:将代码库回滚到上一个版本
git reset --hard HEAD^^:往上回滚两次,以此类推
git reset --hard HEAD~100:往上回滚100个版本
以上回滚是不会把内容删掉的

查看所有的移动记录

git reflog 可以看head的移动记录包括回滚,
然后找到节点的编号,编号其实就是哈希值的前七位

回滚到某一特定版本

git reset --hard 版本号:回滚到某一特定版本

撤销修改

git checkout — XX或git restore XX:将XX文件尚未加入暂存区的修改全部撤销,然后工作区相对于暂存区的修改就删掉了。如果暂存区没有存东西,就变成头节点指的那个文件的内容

如果暂存区也不想用了,stage就是暂存区
git restore --staged + 文件名 将文件从暂存区删出来
git restore + 文件名

这样做其实就相当于,暂存区和工作区都清空了,回到了上一个版本

撤销也并不一定只能撤销增加的,也可以撤销被删除的文件,比如一个文件被持久化了,然后被删除掉了,这个时候你可以选择将删除了这个文件的操作放入到缓存区,也可以不放,如果没有放到缓存区的话,就可以对这个文件进行回滚,也就是可以通过git restore XX将文件进行恢复,再次放入仓库。如果这个文件在缓存区,就需要先进行 git restore --staged XX,将文件从缓存区拿出来

主分支就叫master分支

删除本地仓库

就直接删除文件夹就可以 rm project -rf

云端

在将本地文件传到云端的时候,一定要注意,文件名要一样

分支

默认创建的都是主分支

云端一般叫origin,本都不需要加描述

传到云端

git remote add origin git@git.acwing.com:xxx/XXX.git:将本地仓库关联到远程仓库

从云端复制下来

git clone git@git.acwing.com:xxx/XXX.git:将远程仓库XXX下载到当前目录下

只能把分支复制下来,引用记录没有啦,git reflog为空了
但是 git log 是有的

删除云端仓库

设置 —— 高级—— 删除项目

多分枝

开发的时候,一般不会在主分支上开发,会开辟一个新的分支

创建一个分支

git checkout -b branch_name:创建并切换到branch_name这个分支

并不会立即创建新的节点,所以当前的文件内容,跟它上一个的内容是一样的,缓存区只有一个,不会因为切换分支而改变

查看分支

git branch:查看所有分支和当前所处分支

切换分支

git checkout branch_name:切换到branch_name这个分支

合并分支

git merge branch_name:将分支branch_name合并到当前分支上
这个命令其实就是改变了head指示的节点,如果想让它强行复制一遍的话可以自己搜一下,好像是加上-noff

删除分支

git branch -d branch_name:删除本地仓库的branch_name分支
合并完之后可以删除掉分支

上传至云端

git push -u (第一次需要-u以后不需要):将当前分支推送到远程仓库
git push origin branch_name:将本地的某个分支推送到远程仓库

创建分支

git branch branch_name:创建新分支

下面这个加了一些参数,就是,如果云端没有这个分支,就创建这个分支
git push --set-upstream origin branch_name:设置本地的branch_name分支对应远程仓库的branch_name分支

删除其他分支的时候,要先换到别的分支,如果已经上传到了云端,其实本地和云端是独立的

删除云端分支

git push -d origin branch_name:删除远程仓库的branch_name分支

就是把云端的分支与本地关联(把云端装到本地)

git branch --set-upstream-to=origin/branch_name1 branch_name2:将远程branch_name1分支与本地的branch_name2分支对应(可以看作,如果本地没有这个分支,就创建一个,但是并不会更新内容)

如果要更新内容的话,要以下语句
git pull:将远程仓库的当前分支与本地仓库的当前分支合并
git pull origin branch_name:将远程仓库的branch_name分支与本地仓库的当前分支合并
将云端某个分支的最新版本同步到当前节点,所以pull有两个概念,一个是将云端的分支拿下来,第二个就是merge一下

不一定非要将远程对应的分支合并到当前分支,也可以和另外的分支合并

将云端放到本地

git checkout -t origin/branch_name 将远程的branch_name分支拉取到本地

将某一时刻的工作区包括暂存区全都存到栈(stash)里

stash这个栈可以存储所有没有持久化的修改,这个只跟本地相关
就是,当你的暂存区有修改的内容,你在本地再次修改,网站突然崩了,你也不想对这些内容进行持久化的操作,这时候就可以用stash

暂存区和工作区,虽然和目录是独立的,但是如果我们切换完分支之后会导致目录冲突的话,我们就需要解决冲突了,所以每次我们在切换分支的时候,最好把当前的内容先commit一下,再去切换

git stash:将工作区和暂存区中尚未提交的修改存入栈中
git stash apply:将栈顶存储的修改恢复到当前分支,但不删除栈顶元素
git stash drop:删除栈顶存储的修改
git stash pop:将栈顶存储的修改恢复到当前分支,同时删除栈顶元素
git stash list:查看栈中所有元素

多人合作

如果自己一个人感觉没办法实现的话,可以通过ssh,远程连到一个服务器,然后两个一起工作

两个人同时关联到云端分支,然后两个人一起写代码
如果两个人同时修改了一个文件,就会出现一个情况

就是在云端有个分支
两个人本地都有跟云端相同的分支,但是两个人分别都有了自己的新的节点,这时候,一个人先进行了持久化,没问题,不会报错,然后如果第二个人再进行持久化,就会报错,因为云端的版本已经改变了,跟本地有冲突

这时候就需要pull下来,然后解决冲突,在进行持久化

不过一般没有冲突,因为一般不会同时修改同一个文件,这种情况一般是自己在家和在公司两个电脑导致的。

怎么在云端合并

网站上会有创建合并请求,就是在云端直接进行分支合并

一般自己没有master权限,所以需要提交请求(不同的云端应该不一样,自己搞吧)

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 10:07:34  更:2022-05-14 10:07:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:41:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码