Git学习笔记

根据commit内容模糊查找sha-1 把文件放到.git/(*/)*objects目录下,双击使用,输入commit的内容就能查找到相关的sha-1 立即下载

Git笔记

安装

git官网

git下载

Git命令

查看版本

git --version

检查安装成功,查看版本,输出当前版本 git version 2.21.0

配置名字

git config --global user.name '[your_name]'

配置名字(–global可以改为–local /–system)

设置完—global,在设置—local后 ,优先使用—local的配置

配置邮箱

git config --global user.email '[your_email@163.com]'

配置邮箱

显示配置信息

git config --list --global

显示配置信息

创建仓库

git init [xxx_rep]

创建仓库

把文件添加到暂存区

git add [xxx_file]

把xxx文件添加到暂存区

git add -u

已经添加到git里的文件修改之后,必须再次add一次该文件

加上-u,可以快速把所有文件更新添加,不需要add每一个文件

把变动从暂存区提交到仓库

git commit -m'[add xxx]'

把变动从暂存区提交到仓库,-m后面是条的log信息

执行commit之前 一定要执行add

把文件从暂存区里删除

git rm [xxx_file]

把xxx文件从暂存区里删除

查看提交信息

git log

查看提交信息

清理暂存区

git reset --hard

清理暂存区(也就是清理掉本地工作区与暂存区的区别,让暂存区与本地工作区一模一样)

但是不影响已经提交的文件

reset回退到过去的某次commit(危险!!!)

git reset [1dedb4c7d15a commit sha1]

reset后加具体的提交sha1值,可以会退到[1dedb4c7d15a]这个版本,之后的提交将会被删除(危险操作!!!慎用,虽然可以使用git fsck --lost-found 找回)
可以使用checkout [1dedb4c7d15a]分离头指针查看之前的提交,可以基于此次提交去修改代码,(注意再次切回其他分支时候,必须为此创建一个branch,不然基于此次的commit都会消失),这样可以共存

找回丢失的commit(救命!!!)

git fsck --lost-found

如果不小心使用的 git reset [commit sha1],会把你的[commit sha1]提交之后的文件全部删除

此时,可以通过git fsck --lost-found去寻找那些被悬空(dangling)的commit,然后通过提交的sha1值去

改命令还可以先找到那些被悬空的文件

可参加 github总结(4)–关于git reset --hard这个命令的惨痛教训

image-20190304101451178

修改文件名之后,提交到暂存区

git mv [readme] [readme.md]

修改文件名之后,提交到暂存区

注意:不需要1.在工作区里修改这个文件名,然后 2. add修改后的文件 3.rm旧的文件,

直接执行 git mv [readme] [readme.md]即可

查看简要的log

git log --oneline

查看简要的log

查看最近4个log

git log -n4 --oneline

查看最近4个log

图形化展示所有分支的log

git log --all --gragh

查看所有分支的log,图形化展示

查看git log的帮助,在浏览器里

git help --web log

查看git log的帮助,在浏览器里

调出图形界面

gitk

调出图形界面

创建分支

git checkout -b [分支名] [commit sha1/分支名称]

创建分支

切换分支

git checkout [分支名]

切换分支

查看所有分支

git branch -av

image-20190306164157975

删除分支

git branch -d [分支名]

git branch -D [分支名]

如果-d清除不掉的,确实不想要,可以用-D

其实就是让你确认删除的意思

image-20190306164635157

查看文件类型

git cat-file -t [文件sha1]

查看文件类型,有三种文件类型
commit :提交
tree :文件夹
blod :文件

查看文件内容

git cat-file -p [文件sha1]

查看文件内容,注意只能查看sha1,不能写文件名(因为git存文件是以sha1存储的,避免同一个文件不同名称的情况浪费空间)

直接 cat [文件名]也可以查看文件内容,但这不是git的命令

比较两次提交的差异

git diff [commit sha1] [commit sha1]

还可以用HEAD指代当前的提交
用HEAD~1指代前一次提交 相当于 HEAD^
HEAD~2 指代前两次提交… 相当于 HEAD^^

image-20190306163333703

比较暂存区与HEAD之间的差异

git diff --cached

比较工作区与HEAD之间的差异

git diff —HEAD

比较工作区与暂存区差异

git diff

注意后面什么都不加,表示所有文件作比较

可以使用git diff -- [文件名] 来单独比较指定的文件,注意 --与[文件名]之间必须加空格

image-20190308172615162

如何让暂存区的全部文件恢复成和HEAD的一样?

git reset HEAD

我们每次在工作区修改了文件,都要先添加到暂存区,然后执行commit,把暂存区的文件提交到仓库

git status 是查看工作区与暂存区文件的区别,他不会显示每个文件的具体那内容,只是告诉你

  1. 工作区有一个文件没添加到暂存区 红色 还不能提交
  2. 工作区有一个文件内容修改了,但是没添加到暂存区 红色 还不能提交
  3. 你已经把工作区的修改添加到了暂存区 绿色 可以直接提交了

下图:

  1. 第一次执行 git status 显示你已经把工作区的修改add到了暂存区
  2. 执行完git reset HEAD 后,把暂存区恢复成功与HEAD一样了,也就是说,之前工作区add到暂存区的文件都回退了
  3. 第二次执行git status 显示,你工作区的文件,还没有add进暂存区,
  4. 其实git reset HEAD 是 git add 的逆向操作

image-20190308173316672

暂存区里的部分文件恢复成和HEAD一样

git reset HEAD -- [文件名]

git reset HEAD -- [文件名] [文件名] 多个文件之间使用空格

image-20190312145515774

工作区恢复成暂存区状态 23

git checkout — [文件名]

如果变暂存区内容:reset

如果变工作区内容:checkout

消除最近的几次提交 24

git reset — hard [commit sha1值]

image-20190312160058515

修改最近一次提交的msg

git commit --amned

image-20190306165644464

弹出

image-20190306165603799
修改完退出后

image-20190306170100514

修改前几次的提交信息

git rebase -i [commit sha1]

假设log历史为

5
4
3
2
1

第一步:
image-20190306172552145

注意:要改变第3条log,必须 git rebase 2 也就是3的父亲,然后再展开操作

第二步:
弹出下图,把你要修改的那条提交 pick 改为r ,保存退出
image-20190306170732470

第三步:
退出上图会再次弹出一个图,直接修改log信息,然后保存退出,就成功了(这一步没截图,使用这个黑色的图凑一下,就是这个图)

image-20190306172449746

第四步:
注意下图变基之后的提交sha1都变了
image-20190306172754310

合并多个连续的commit为一个commit

需求:

合并多个提交

image-20190308110734050

第一步:

git rebase -i [父提交sha1]

image-20190308110840579

第二步:弹出下图,把pick改为s ,‘ESC’键,输入:wq 退出

image-20190308105345136

第三步:

这时候会弹出来,键入三次合并一次的提交信息,保存退出

image-20190308110428664

弹出

image-20190308111337716

检查一下子:

image-20190308112309546

合并多个不连续的commit

需求:

image-20190308112852573

步骤繁琐一点,略 可参见视频《怎样把间隔的几个commit整理成1个》

临时加塞的紧急任务怎么办stash

基于上次提交,正在修改A文件,但是还没改完,这时候突然有紧急bug,需要处理C文件,
可以使用 git stash 把目前的修改了一部分的A文件暂存在一边,此时git status发现工作区是干净的,与暂存区一样的,
现在去处理C文件,处理完后提交即可
现在想回过头来继续处理A文件,执行git stash apply或者git stash pop后即可把做了一般的A文件恢复

git stash

把目前手头上的活先搁置到一边存起来

git statsh list

查看所有stash的列表

WIP on master: c5618a9 qqq)

git stash apply

类似堆栈,弹出最上面的stash

把 stash里的改动弹出来,放到工作区,而且stash list里的信息(WIP on master: c5618a9 qqq)还存在

git stash pop

把 stash里的改动弹出来 放到工作区,而且删除stash list里的信息(WIP on master: c5618a9 qqq)

添加忽略文件

image-20190312163655898

image-20190312163830860

注意:

doc 表示不管doc文件夹,也不管doc文件夹下面的文件

doc/ 表示要管里doc文件夹,但是不要管doc文件夹下面的文件

image-20190312163937450

git备份

image-20190312164322223

image-20190312164416037

image-20190312164440055

哑协议(一般不用)

image-20190312165347488

智能协议(一般用这个)

git clone --bare file:///path [仓库名].git [备份仓库名]

image-20190312165823908

本地的仓库push到远端仓库

需求:

在上图中,hello这个仓库是本地的仓库,我们在这里完成工作,并提交到仓库里

上图中的ya.git和zhineng.git属于远端仓库,是通过git clone --bare file:///path [仓库名].git创建的,

现在我们要把平时工作的hello仓库的提交,push到远端的zhineng.git

第一步:通过git remote add建立仓库间的关联

切换到本地hello仓库,执行

git remote add <name> <url>

git remote add [zhineng] [file:///Users/apple/learning/beifen/zhineng.git]

建立关联

此时可以通过 git remote -v查看本地仓库所关联的远端仓库地址

image-20190312180545133

第二步:git push

首次提交需要使用git push --set-upstream zhineng temp
以后使用 git push <name>即可

这样每次本地hello仓库有了变动,就可以push到远端了

注意:如果本地关联了多个远端仓库

  1. 先查看所有的远端仓库 git remote -v
  2. 然后选择你要push的仓库地址 git push [路径]

image-20190313093652346

Github

GitHub里创建ssh公钥、私钥 ?

帮助文档

创建公钥私钥

image-20190313100409056

查看创建好的公私钥(我原来就有,新创建了一个)

image-20190313100221581

在github里配置公钥

配置好公钥后,以后不需要输入账户名密码,github会智能识别你的身份

在上图的命令行里切换到公钥所在目录,输入命令查看公钥信息

image-20190313101201273

然后打开github,复制进去

image-20190313100810563

配置好如下图(这是老师在视频里的截图)

image-20190313100859522

在github上创建一个个人仓库

略

把本地的仓库关联到github的仓库
  1. 复制远端地址 use HTTPS 可以切换各种协议,得到远端不同的仓库地址
  2. 本地运行git remote add [新起个仓库名字] [远端仓库地址]

image-20190313103652029

image-20190313103951652

往github上push

在上图中 执行 git push [我们起远端仓库名 github] --all

--all表示push本地所有分支

push 之前一定要先在github上配置好公钥,不然会显示没有权限

开始push,出现问题

image-20190313112816596

git fetch [远端仓库名] [远端仓库分支]

image-20190313113532027

gitk --all图形化查看所有分支

image-20190313114237039

我们直接 git merge [远端分支],被拒绝了

image-20190313115159016

需要加上 --allow-unrelated-histories去merge不相关的提交

git merge --allow-unrelated-histories github/master

image-20190313115310232

查看本地+远端所有分支

image-20190313111035200

ok,merge成功了

image-20190313115517344

现在再去push

image-20190313131934726

再次看看图形

本地仓库

image-20190313132039391

github仓库

image-20190313132345982

不同人修改了不同的文件 34

步骤:
  1. 先git push 试一下
  2. 如果被拒绝了,就git fetch
  3. 然后mergegit merge [远端分支名 github/feature/add_git_commands]
  4. 最后再次git push
以下的为演化解释过程
从github上把仓库克隆下来

git clone [远端仓库地址] [克隆到本地后的仓库名字]

image-20190313133750565

为了模拟不同的提交者,我们先建立一个新的用户,用这个zhang用户来操作刚刚git clone的git_hello2本地仓库

在这个git_hello2里创建的local config 后以后这个仓库的提交者就是zhang了

git config --local user.name 'zhang'

git config --local user.email 'zhang@163.com'

bogon:hello apple$ git config --local -l

user.name=zhang
user.email=zhang@163.com
bogon:hello apple$

git branch -av

查看所有分支 远端+本地

git -b [本地分支名] [远端分支地址]

git -b feature/add_git_commands origin/feature/add_git_commands

我们基于远端的origin/feature/add_git_commands分支在本地创建一个新的分支,也叫feature/add_git_commands
如果远端有一个新分支,本地没有,你要是想操作这个分支,就必须在本地基于这个分支建立一个分支,同时,本地分支会关联到远端分支,你就可以操作提交push了 假设你修改了A文件,提交并且push成功了

image-20190313135424137

切换回到原来操作的本地仓库hello,由于现在远端新建的分支,hello仓库还不知道呢,所以先fetch下来

git fetch github

image-20190313150802165

此时此刻,本地还是没有建立新分支的,只是能看见远端出现了一个新分支

image-20190313151155088

现在需要创建新分支命令 git -b feature/add_git_commands origin/feature/add_git_commands

image-20190313151437359

现在本地就有了远端最新的分支了,可以在本地仓库提交push了,假设你修改了B文件,本地提交,

在push时候,报错

image-20190313155736384

提示你要先fetch

image-20190313155851453

现在就可以merge了

git merge [远端分支名 github/feature/add_git_commands]
因为本例子中不同的人分别修改了不同的文件所以没有冲突,直接merge成功了(盗的图意会即可)

image-20190313160218120
然后push即可

image-20190313160425841

理解

探秘.git 隐藏文件夹

理解HEAD文件

在.git文件夹下有个HEAD文件,他里面保存的是指向refs,实际上就是一个在当前分支上的最新的一次提交sha1

每次成功的提交,及每次切换分支,这里都换变化,都指向—》当前分支上的最新的一次提交sha1

git三种对象之前的关系 commit—》tree—》blob

以下的文件都在 objects(上图的红框)里

每次commit 包含一个文件夹(tree)

每个文件夹(tree) 包含一个或者多个文件夹(tree)/文件(blob)

每个文件(blob)在git里存储不是以文件名存储的,而是以sha1存在的,因为对于相同的文件,不同的文件名,git只存储一份,节约空间

分离头指针(危险!!!)

有时候,我们checkout了一个commit(注意:不是切换分支 ,切换分支是 checkout [分支名])
然后我们基于这个commit,进行了变更,现在由于不是在任何分之下进行的变更,在你下次且回到其他分支的时候,git会把这些变更丢弃掉,危险!!!
git比较智能的,你切换分支时候,会提示你,要不要参加一个分支,保存上面的更改
如果你再试试临时性的更改,那就不要创建分支
如果需要保存更改,必须创建分支

理解后就不危险了

其他

列出目录下的文件信息

ls -al

显示目录下的文件信息

拷贝文件

cp [file/dir] [dir]

拷贝文件

. 当前目录

…父目录

cp hao.txt file/c.txt

删除文件

rm [file/dir]

删除文件

创建文件夹

mkdir [dir]

创建文件夹

删除空文件夹

rmdir [空目录]

不过一旦目录非空会提示
Directiry not empty

删除非空文件夹

rm -rf [/User/Dhyana/desktop]

使用rm既可以删除文件又可以删除文件夹
删除文件夹(无论文件夹是否为空),使用 -rf 命令即可。
即:rm -rf 目录名字
-r 就是向下递归,不管有多少级目录,一并删除
-f 就是直接强行删除,不作任何提示的意思

将会删除 /User/Dhyana/desktop目录以及其下所有文件、文件夹

危险!!!使用这个rm -rf的时候一定要格外小心,linux没有回收站的,删除之后再想找回就很难了

重命名文件

mv [readme.txt] [readme]

重命名文件

创建文件

vi [aa.txt]

创建文件aa.txt(并且可以编辑内容)

编辑完 按ESC退出

输入:q(不保存退出)

或者:wq(保存退出)可以在后面加感叹号(强制执行)
vi 会有提示E是可以改
然后按i
下面出现INSERT就可以编辑,编辑完输入:wq!保存退出
切记要将输入法变成英文不然中文输入没反应

寻找该文件夹下的所有文件

find [文件夹路径] -type f

寻找该文件夹下的所有文件 -type f 表示指定找file类型

以上所有内容均为学习***极客时间苏玲老师的《玩转git三剑客》***课程的笔记,老师讲解很透彻,感谢!!!

笔记持续更新中…

WIN10环境下STK11.5(含Analyzer, EOIR, Scheduler插件)的安装与破解全攻略 本文提供了一份详细的WIN10环境下STK11.5软件及其核心插件(Analyzer, EOIR, Scheduler)的安装与破解全攻略。内容涵盖从安装包准备、系统环境检查,到基础版安装、插件部署、破解文件替换及许可证配置的完整步骤,并附有常见问题排错指南,旨在帮助用户免费搭建功能齐全的卫星仿真分析环境。 阅读详情

相关推荐

envi5.3处理高分二号影像数据详细过程记录

全文根据此篇文章进行数据处理: tm影像辐射定标_高分二号影像数据预处理及裁剪过程 其他参考: 学习笔记---遥感影像辐射定标与大气校正 利用ENVI自带全球DEM数据计算区域平均高程 高分二号数据处理流程(有高分二号的数据信息) GF2有多光谱和全色两个数据,MSS是多光谱的,PAN是全色的,多光谱的分辨率低,全色的高,需要把这两个数据融合,融合之前需要做定标等处理,获取经纬度。 一、多光谱影像处理 1. 辐射定标 以这个为例: 其他路径\2022.4.2...

ligous的博客 5万+

git 查看当前分支最近一次提交的commit SHA

获取commit SHA

Andy的博客 2201

超越数据手册:深入Zynq XADC的DRP接口与PL端自定义采样逻辑

本文深入探讨Zynq-7000系列XADC模块的DRP接口机制与PL端自定义采样逻辑实现。通过硬件级多通道轮询、触发采样和实时校准技术,突破传统软件驱动限制,为高精度电压测量和通讯应用提供极致灵活性和响应速度。

xxx12的博客 770

git中保证文件完整性的SHA-1值(commit ID)

在Git中,每个commit ID的信息(如cc127537978af35e2f502da7e8d22e340ed810e5)就是一个SHA-1 Hash值,它是对那个commit是Git仓库中内容和头信息(Header)的一个校验和(checksum)。Linux kernel开创者和Git的开发者——Linus说,Git使用了SHA-1并非是为了安全性,而是为了数据的完整性;它可以保证,在很多...

chuixue24的博客 8687

scRNA-seq的fastq文件处理流程——持续更新

获得了一批新的scRNA-seq的fastq.gz文件,每个样本的数据形式为: 我打算使用10X cellranger处理fastq.gz文件,下载及安装方式在官网:https://support.10xgenomics.com/single-cell-gene-expression/software/downloads/2.0这个网址写了10X cellranger处理fastq.gz文件的命名规则https://support.10xgenomics.com/single-cell-gene-expr

watermel__的博客 3199

Win系统蓝牙设备频繁卡顿/断连 - 解决方案

无线网卡有2个模块,一个是WiFi,一个是蓝牙,因此蓝牙问题可能和无线网卡有关。在某些情况下,例如高温或WiFi速率过高,会导致蓝牙频繁卡顿/断连。解决方法分为2种,1是更新驱动,2是更换无线网卡。

NSJim的博客 2万+

git基本概念

对象名:使用对象内容做SHA1哈希计算得来,40位对象包括三个部分:类型、大小和内容4种类型:blob、tree、commit和tag blob用来存储文件数据,通常是一个文件 tree像目录,管理一些tree或blob(像文件和子目录) commit指向tree,它用来的标记项目某一个特定时间点的状态。它包括时间点的元数据,如时间戳、最近一次提交的作者、指前上次提交的指针等等。 tag用来标记某一

平凡 749

VBA学习笔记6:将多个工作表中满足条件的数据汇总到同一个工作表

VBA学习笔记6:将多个工作表中满足条件的数据汇总到同一个工作表

weixin_45355881的博客 4708

github页面查看commit的完整SHA值

github页面查看commit的完整SHA值

weixin_42654528的博客 2652

YOLOv8的Anchor-Free革新:从中心点预测到动态IoU匹配的全面解析

本文深入解析了YOLOv8采用Anchor-Free(无锚框)设计的核心优势与实现机制。通过摒弃预设锚框,模型直接预测目标中心点与宽高,结合解耦头、动态IoU匹配及Varifocal Loss等创新,显著简化了训练流程并提升了检测精度,尤其在小目标检测和模型泛化能力上表现突出。

weixin_29094301的博客 357

B.3【智能标注】:基于Labelstudio的UIE半监督深度学习的智能标注方案(云端版),提效。

Label Studio 所提供的 Machine Learning Backend 提供了一个比较灵活的辅助人工标注的框架,我们通过它确实可以加快 nlp 数据的标注Label Studio 的 enterprise 版本提供了 Active Learning 的流程,不过从其描述看这个流程并不完美,尤其是 fit 部分,由于 Label Studio 低估了「Train」所花费的时间,所以每次标注都自动训练的流程可能并不会那么顺滑(会在链接时候等待一段时间)

丨汀、的博客 1840

如何在存储库中获取最新的git commit SHA-1?

How to get the latest git commit SHA-1 id in a repository? 如何在存储库中获取最新的git commit SHA-1 id? And how to get the first 8 digits of the SHA-1? 以及如何获得SHA-1的前8位数字? Instead of the method introduced here, ...

cuma2369的博客 1286

Python 爬虫实战:爬取 B 站 UP 主投稿数据,分析更新频率与粉丝互动

摘要:本文基于Python技术实现B站UP主投稿数据的自动化爬取与分析。通过解析B站WBI签名机制和API接口,获取UP主视频的标题、播放量、点赞数等核心数据。采用时间序列分析统计更新频率,结合相关性分析挖掘内容特征与粉丝互动的关联。结果显示编程类视频播放量最高,10-20分钟时长的视频表现最佳,投币数与播放量相关性达0.92。文章详细介绍了接口分析、反爬应对等关键技术,为内容创作者优化策略提供数据支持,同时强调遵守平台规范的爬取原则。

2503_91057718的博客 1538

Git 学习笔记

个人对 Git 初步学习的理解以及记录

m0_73959697的博客 2110

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

GIT 学习笔记

GIT 学习笔记 --- 思维导图

weijinhua_123的博客 458

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

git学习笔记

git学习下载 Git-2.19.1-64-bit 包 以及git安装步骤和git常用命令

解决bug的路上 244

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Git学习笔记之——常见指令

Git学习笔记之-------常见指令 工作区\暂存区\仓库 说明 git config --global user.name “名称” 注册用户名 git config --global user.email “邮箱” 注册用户邮箱 git init 在当前文件夹建立Git项目 git mv game.py wordgame.py 本地安全地修改文件名 git ...

iot小胡的博客 378

git和github学习笔记

git和github学习笔记 仅为学习笔记和重要内容参考,如果想学习git相关知识,请移步廖雪峰的git教程 安装git windows下下载二进制安装 创建git仓库 在git bash工具窗口内,切换到某文件夹下,输入git init在该文件夹下生成.git文件夹 git常用命令 语句 含义 git status 查看状态 git log 查看日志 git reflog...

ShadowKiller' blog 771

Git学习笔记大全

本文是一份全面的Git学习指南,系统介绍了Git的核心概念和操作指令。主要内容包括:版本控制原理(集中式与分布式对比)、Git核心概念(仓库、提交、分支等)、基础操作(创建仓库、提交更改)、进阶操作(分支管理、合并冲突)、高级功能(储藏修改、标签管理)以及远程操作(推送拉取)。文章详细讲解了50+常用Git指令,涵盖配置、提交、分支、撤销、合并等日常开发场景,并附有操作示例和注意事项。适合Git初学者系统学习,也可作为开发者的速查手册,帮助掌握这个强大的分布式版本控制工具。

2402_88633912的博客 1237
上一篇: 触摸事件分发
下一篇: Django入门
Android_Study_OK
博客等级 码龄11年 91粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值