首页 > 其他分享 >一篇文章掌握Git的基本原理与使用

一篇文章掌握Git的基本原理与使用

时间:2024-12-14 20:01:30浏览次数:10  
标签:文件 Git 一篇 查看 基本原理 暂存区 git 提交 分支

目录

一、创建仓库

1.1 git init

1.2 git clone

二、工作区域与文件状态

三、添加和提交文件

3.1 git status

3.2 git add

git rm --cached

3.3 git commit

git log

四、版本回退

soft

hard

mixed

总结

五、查看差异

工作区与暂存区

工作区与本地仓库

暂存区与本地仓库

版本差异

分支差异

六、删除文件

git rm

git rm --cached file

六、.gitignore 忽略文件

七、分支

7.1git branch显示分支

7.2git branch 分支名创建分支

7.3git switch 分支名切换分支

7.4 git merge src des合并src分支至des分支

7.5 rebase 变基

7.6 git branch -d 分支名删除已合并的分支

7.7 git branch -D 分支名删除未合并的分支

八、解决合并冲突

8.1 设计冲突

8.2 冲突现象

8.3 解决冲突

九、版本回退


一、创建仓库

1.1 git init

使用 git init 初始化git仓库,然后可以使用ls -a查看隐藏的目录结构观察到.git目录

1.2 git clone

使用git clone 可以从远程仓库拉取仓库到本地

二、工作区域与文件状态

git 分为三个区域,分别是工作区(Working Directory)、暂存区(Staging Area/Index)、本地仓库(Local Repository):

  • 工作区:实际操作的目录
  • 暂存区:相当于一个缓冲区,临时存放即将提交的修改内容
  • 本地仓库:Git存储代码和版本信息的主要位置

    Git中的文件也存在各自的状态,如下:
  • 未跟踪:新创建的还没有被Git管理起来的文件
  • 未修改:已经被Git管理,但是文件的内容没有发生变化
  • 已修改:已经被修改的文件,但是还没有被添加到暂存区
  • 已暂存:已经被修改过并放入暂存区的文件
    可以使用git ls-files查看暂存区的文件内容
    可以使用git -ltr查看本地仓库的文件内容

三、添加和提交文件

3.1 git status

可以使用git status查看当前工作区的文件状态,下面新建一个文件,使用status后发现文件飘红,这就是未跟踪的文件:

3.2 git add

可以使用git add将文件添加到暂存区,可以看到刚才飘红的file1.txt已经变成绿色,这表示该文件已经被添加到暂存区:

git add还支持通配符与文件夹的添加,如
git add \*.txt git add dir1/,分别表示添加所有以txt结尾的文件与dir1下的所有文件

git rm --cached

在上图中可以看到,绿色的字体上方有一句提示,使用该命令可以将文件从暂存区中删除:

需要注意的是,<file> 中的 < 和 > 是特殊字符,在 Zsh 中具有特殊含义(例如重定向)。如果你希望直接使用文件名 file1.txt,不需要加 < 和 >。

3.3 git commit

将暂存区的文件添加到本地仓库,它只会与暂存区和本地仓库交互,并不影响工作区的文件,

  1. 除此之外,使用git commit提交时要使用-m选项指定文件的提交信息,
  2. 如果不使用-m,则默认使用vim来编辑提交信息:

git log

git log可以查看所有已经提交的提交信息

可以加上其他选项,如--oneline,这样就会显示比较简洁的提交信息:

四、版本回退

使用git reset时,需要在后面加上回退的版本ID,或者使用 HEAD^ 表示上一个版本
可以使用git reset进行版本回退,同时其支持三种模式:

  • git reset --soft:保留工作区与暂存区的所有修改内容
  • git reset --hard:丢弃工作区与暂存区的所有修改内容
  • git reset --mixed(default):保留工作区,丢弃暂存区的修改内容
    再次新建三个文件,分两次提交,第一次提交前两个文件,第二次提交第三个文件:

    接着使用git log查看提交历史:

soft

  • 当你提交后,发现提交信息有问题或漏加了一些文件时,可以回退到提交之前的状态,保留文件变更。
    使用soft回退到提交两次文件的版本后,使用git log查看,可以看到提交历史已经成功回退到提交两次文件的时候:

    查看工作区与暂存区的文件,可以看打它们都没有被删除,且因为回退到了3.txt未被提交的版本,这里显示其是一个新文件:

hard

  • 彻底清理: 当你需要放弃所有未提交的更改和暂存内容,回到某个提交的状态。
  • 切换分支时冲突太多:如果切换分支或合并导致大量冲突,并且你决定完全放弃当前的更改,可以使用
    回退前:

    回退后:

    查看工作区与暂存区的内容,发现3.txt都被删除了:

mixed

撤销提交并重新整理文件:当你需要取消提交,同时希望对文件进行修改或重新选择哪些文件需要暂存时。
回退前:

回退后:

查看工作区与暂存区,可以发现工作区的3.txt未被删除,但是暂存区的已经被删除:

总结


如果误删除,也不需要担心,可以使用git reflog查看操作的历史记录,然后继续使用git reset进行回溯:

五、查看差异

可以使用git diff查看以下内容:

  • 工作区、暂存区、本地仓库之间的差异
  • 查看不同版本的差异
  • 查看不同分支之间的差异
    目前有三次提交:

工作区与暂存区

现在要修改3.txt的内容,然后使用git diff查看:


以上内容说明3.txt修改的内容还没有被添加到暂存区,现在将其添加到暂存区后查看:


可以看到已经没有任何的内容了,表示工作区与暂存区的内容是相同的。

工作区与本地仓库

使用git diff HEAD查看工作区与本地仓库的差异:

暂存区与本地仓库

使用git diff --cached查看暂存区与本地仓库的差异:

版本差异

使用git diff 版本1ID 版本2ID可以比较版本差异,

  • HEAD指向最新一次提交,也可以使用其指代最新的一次提交。
    • HEAD~表示上一次提交。
    • HEAD~2表示本次提交前的第二个版本。
  • 可以在后面加上文件名,这样只会比较该文件的版本差异

分支差异

使用git diff 分支1名 分支2名可以查看分支间的差异,具体内容需要看分支小节

六、删除文件

首先查看本地仓库的文件内容:


正常删除文件的流程:

  1. 删除本地文件
  2. 使用git add更新暂存区列表
  3. 使用git commit更新本地仓库

git rm

git中提供git rm命令,可以合并上述的步骤1与步骤2,


但是最后还是要执行git commit删除本地仓库的文件:
执行git commit前:


执行git commit后:

git rm --cached file

如果只需要删除暂存区的文件,可以使用该命令

六、.gitignore 忽略文件

可以创建一个.gitignore文件,在其中添加需要忽略的文件:

此时git就会主动忽略与.gitignore中的文件格式相同的文件:


需要注意的是,git只会忽略.gitignore提交以后生成的文件,如果在.gitignore提交前生成的文件,git还是会进行跟踪。

七、分支

7.1git branch显示分支

可以看到 main 前有一个*,这其实就是HEAD指针,它指向的是当前分支:

7.2git branch 分支名创建分支


在创建分支时,该分支会继承本分支上的提交记录:
 

7.3git switch 分支名切换分支


在当前分支下创建两个文件并提交到本地仓库,然后切换分支,来观察main分支是否存在新建的文件:
 


当我们在不同分支间切换时,其实就是HEAD指针指向的改变,这也就解释了为什么在testing分支提交的文件,在main分支不可见:


此时在main分支提交两个文件后,则底层实现会变为:


注:为了方便观察,这里使用提交信息代替了版本ID

7.4 git merge src des合并src分支至des分支

在合并之前,需要先进入des分支

7.5 rebase 变基

rebase 分支名将当前分支变基到指定的分支。
变基(Rebase) 是 Git 中一种重新整理提交历史的操作,它会将一个分支的提交应用到另一个分支的基础之上。
 

7.6 git branch -d 分支名删除已合并的分支

7.7 git branch -D 分支名删除未合并的分支

八、解决合并冲突

如果两个分支修改了一份文件的同一行代码,git就不知道应该保留哪个内容,也就产生了冲突:

8.1 设计冲突

我们来重新设计一下,用main分支新建文件并提交后新建newb分支:

在newb分支修改main.txt的第二行内容并提交:

切换回main分支修改main.txt的第二行内容并提交:

8.2 冲突现象

尝试合并:

可以使用git diff查看冲突:

8.3 解决冲突

在合并失败后,可以再次编辑该文件,此时文件中就会存在冲突的信息:

此时就需要手动编辑来解决冲突:

当冲突解决后,进行添加与提交,提交后就会自动合并:

如果中途想终止合并,也可以使用git merge --abort

九、版本回退

git checkout -b 分支名 提交ID可以回退到指定的版本
其中,提交ID可以通过git log --oneline --graph --decorate --all查看,同时该指令也可以比较直观的查看当前所有分支。

标签:文件,Git,一篇,查看,基本原理,暂存区,git,提交,分支
From: https://blog.csdn.net/m0_75186846/article/details/144359904

相关文章

  • 请统计一篇英文文章里所有小写字母各出现了几次。:JAVA
    链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网 题目描述请统计一篇英文文章里所有小写字母各出现了几次。输入描述:输入若干行,处理到文件结尾。字符总数<=100000输出描述:输出若干行,按字符序输出每种小写字符的出现次数,没有出现的字符不用输出。示例1输入a......
  • gitlab-runner执行失败
    gitlabrunner:ERROR:Jobfailed:prepareenvironmenthttps://segmentfault.com/a/1190000044719792查询相关的站点显示错误的原因是由于gitlabrunner执行了用户文件夹下的.bash_logout脚本。一般的解决方法都是将github-runner用户下的.bash_logout中的内容注释掉即可。......
  • gitlab-cid示例1
    default:before_script:-echo"startdeploy"-echo$CI_COMMIT_REF_NAME#阶段stages:-install-buildDev-buildTest-buildProd-deployDev-deployTest-deployProdcache:paths:-node_modules/#安装依赖install:stage:instal......
  • GIT_SSH_COMMAND 只对特定的 Git 仓库生效
    要使 GIT_SSH_COMMAND 只对特定的Git仓库生效,可以在仓库的配置文件中进行设置。具体步骤如下:方法:在特定Git仓库中设置进入特定的Git仓库目录:cd/path/to/your/repo设置SSH命令:gitconfigcore.sshCommand"ssh-p222"验证配置你可以通过以下命令确认设......
  • 【每天一篇深度学习论文】残差Swin Transformer块与交叉注意力模块RCAM
    目录论文介绍题目:论文地址:创新点方法模型总体架构核心模块模型迁移消融实验论文介绍题目:Swinfsr:Stereoimagesuper-resolutionusingswinirandfrequencydomainknowledge论文地址:链接:https://openaccess.thecvf.com/content/CVPR2023W/NTIRE/papers/Ch......
  • git权威指南-diff
    https://git-scm.com/downloadshello.txt应该杜绝文章中的错别子。但是无论使用*全拼,双拼*还是五笔是人就有可能犯错,软件更是如此。犯了错,就要扣工资!改正的成本可能会很高。world.txt应该杜绝文章中的错别字。但是无论使用*全拼,双拼*还是五笔是人就有可能犯......
  • 手搓一个极简远端git库
    原文地址:手搓一个极简远端git库–无敌牛欢迎参观我的个人博客:无敌牛–技术/著作/典籍/分享等问题分析公司一直用gitlab(或者极狐都是一样的)作为代码管理库,但是看了一些文章说代码最小的管理只需要git就可以了。那么gitlab和git到底是什么关系呢?就调研了一下。......
  • GitLab安装使用
    GitLab的安装1.环境配置关闭防火墙和selinux[root@gitlab~]#systemctlstopfirewalld[root@gitlab~]#systemctldisablefirewalldRemoved"/etc/systemd/system/multi-user.target.wants/firewalld.service".Removed"/etc/systemd/system/dbus-org.fedoraproj......
  • Git设置代理的方式
    不废话,设置Git代理,分全局和局部的配置。设置代理gitconfig--globalhttp.proxyhttp://proxyuser:proxypassword@proxy.server.com:portgitconfig--globalhttps.proxyhttp://proxyuser:proxypassword@proxy.server.com:port取消设置代理gitconfig--global--unseth......
  • 数字加密的基本原理和典型应用场景
    一、数字加密的概念1.1加密概念数据加密技术是指一条消息通过加密密钥和加密函数转换成无意义的密文,接收者通过解密函数和解密密钥将密文还原成明文。这样,我们就可以保护数据不被非法窃取和读取。提高计算机安全水平的基础是掌握数据加密的本质,数据加密由明文(未加密报文)、密......