Git学习笔记

说明

本文为自学《Git 教程 by 廖雪峰》的个人整理笔记,仅用于知识点记录,方便回忆,无其他用途,原作者如有异议,请联系我将文章删除。

开始

  1. 安装Git一路next
  2. 新建文件夹 foldername
  3. 右键Git bash

备忘录

  • 工作区:能看见操作的区域
  • 版本库缓存区:都在.git 文件夹中没事别去改它
  • HEAD:指向maste,而不是指向分支,master指向分支,新建分支dev,dev和master未修改前指向同一地方,切换分支就是把HEAD指向master或者指向dev

新建本地仓库

git init//只在创建仓库时使用
//以下两行为配置本地仓库(文件夹内)全局变量,不配置这两个无法提交修改(本地与远程都不行)
git config --global user.name 'name'
git config --global user.email 'email@example.com' 

更新本地仓库

说明:

  • 可以编辑修改的内容为工作区
  • 工作区----》缓存区----》本地仓库《----》远程仓库
  • 缓存区内容未进入版本更迭不在时间轴上 ,所有提交会一个个串联起来
git add filename(-A)//可以把单个文件改动推入缓存也可以把所有改动推入缓存
git commit -m 'descrip' //为本次的修改提供一个描述

查看状态

如果有未提交的更改就会显示

git status

查看日志(回退过去)

按时间轴把保存列出来,最新的一定是HEAD,只能看见HEAD之前的,所以回退的同时记得把现在的id记下来,不然回不来。

git log

如果只查看最后一次提交信息

git log -1

查看操作记录(找到未来的版本)

回到过去后head指针就指向过去了,那时候的版本在这时看git log就是最新版本

git reflog

撤销修改(一键还原)

  • 把工作区里的修改全撤销
  • 撤销readme.txt中的修改会退到最近的最新版本或者暂存群里的。回退后head指向以前此时以前版本为最新区域
 git checkout -- readme.txt 

回退版本/撤销单个文件修改

git reset --hard HEAD (id/~/^)//回退版本
git reset HEAD filename//将暂存取得filename的改动回退到工作区

删除一个文件(慎用)

这个操作连同工作区的文件一起删掉(回收站也没找到这个文件)

git rm filename

但是可以用回退版本找到
下面的操作则不会删除本地文件或文件夹

git rm --cached <filename>
git rm -r --cached <foldername>

创建 SSH KEY

  • 可以不设密码一路回车
 ssh-keygen -t rsa -C "youremail@example.com" 

最后会找到生成.ssh文件夹里面有id_rsa及id_rsa.pub两个文件分别为私钥和公钥

  • github或者gitee上添加公钥:只有自己电脑公钥添加到了这些账号的ssh key 中才能同步

关联远程库

git添加 远程仓库(remote) 在本地命名为origin ,这个仓库的ssh地址为:git@github.com:user/learngit.git (首先要在网站上user这个用户下新建一个learngit仓库)

$  git remote add origin git@github.com:user/learngit.git

删除与远程库origin的链接

git remote rm origin

推送

推送到 origin 的master枝上,origin之前已经设置过地址

git push origin master

如果出现The authenticity of host 'github.com (52.74.223.119)' can't be established是指github.com的真实性无法被确认,让你确认是否链接 输入yes回车即可

  • git push 如果当前分支与多个主机存在追踪关系,那么这个时候-u选项会指定一个默认主机,这样后面就可以不加任何参数使用git push。

  • git push -u origin master 上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。

  • git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。

创建分支/切换/合并删除

创建dev分支

git branch dev

切换dev 分支

git checkout dev
//注意与上文中撤销文件修改区别
(git checkout -- filename)

可以合并为一个命令 分支且切换

 git checkout -b dev

查看分支情况:

git branch

分支合并

git merge branchname

但是分支修改了,主枝也修改了,并且修改的文件一样相同就会出现问题。
用下列指令查看流程图

git log --graph
  1. 使用 git status查看冲突文件

  2. 修改冲突文件,再次提交,合并成功。

  3. 删除分支 git branch -d branchname,强制删除使用git branch -D branchname

注意:合并冲突时 主线上提示符从 master 变成了 master|MERGING 处理完成后才会变回 master

删除分支后保留分支信息

  • 通常,合并分⽀支时,如果可能,Git会⽤用“Fast forward”模式,但这种模式下,删除分⽀支 后,会丢掉分⽀支信息。
  • 如果要强制禁⽤用“Fast forward”模式,Git就会在merge时⽣生成⼀一个新的commit,这 样,从分⽀支历史上就可以看出分⽀支信息。
 git merge --no-ff -m "merge with no-ff" branchname 
  • 简约查看日志则可以将git log --graph拓展为git log --graph --pretty=oneline --abbrev-commit

分支使用概况图

在这里插入图片描述

各种分支使用

bug分支

软件开发中,bug就像家常便饭⼀一样。有了bug就需要修复。在Git中,由于分⽀支是如此的 强⼤大。
每个bug都可以通过

  1. 新的临时分⽀支
  2. 用新分支修复,
  3. 修复后合并分⽀支,
  4. 然后将临 时分⽀支删除。

Git还提供了⼀一个stash功能,可以把当前⼯工作现场“储藏”起来,等以后恢复现场后 继续⼯工作

git stash 

这时候git status时工作区就是干净的,

  1. 确认改bug分支,切换到这个分支再分支出去
  2. 修改完,提交合并删除
  3. 切换回之前储存的分支
  4. 查看stash里存储的现场git stash list
    之后有两种:
  • 提取stash的现场,但是stash里还存在,需要手动删除
git stash apply
git stash drop
  • 直接提取删除
git stash pop

feature分支

  • 添加⼀一个新功能时,你肯定不希望因为⼀一些实验性质的代码,把主分⽀支搞乱了,所以,每添 加⼀一个新功能,好新建⼀一个feature分⽀支,在上⾯面开发,完成后,合并,后,删除该 feature分⽀支。
  • 这个部分不需要没有特别只是编程习惯的提醒,如果要丢弃⼀一个没有被合并过的分⽀支,可以通过git branch -D name强⾏行删除

多人协助

查看远程库git remote或者git remote -v

$ git remote -v
origin  git@github.com:user/name.git (fetch)
origin  git@github.com:user/name.git (push)

表示可以抓取和推送的网址。

推送

下面这句话的意思是向origin 推送本地 master分支

git push origin master

也可以推送dev分支

git push origin dev

但是,并不是⼀一定要把本地分⽀支往远程推送

  • master分⽀支是主分⽀支,因此要时刻与远程同步;
  • dev分⽀支是开发分⽀支,团队所有成员都需要在上⾯面⼯工作,所以也需要与远程同步;
  • bug分⽀支只⽤用于在本地修复bug,就没必要推到远程了
  • feature分⽀支是否推到远程,取决于是否合作在上⾯面开发。

抓取分支

  1. 原始克隆
 git clone git@github.com:user/name.git 
  1. 抓取分支
  • 克隆下来只有master分支
  • 克隆其他分支如下方所写:新建分支 参照远程库orgin下dev分支创建
$ git checkout -b dev origin/dev
Switched to a new branch 'dev'
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
  1. 双方推送相同分支出现冲突
  • dev由a与b一起改写,a先推送了,这时候远程就和b本地之前的dev不符合就会拒绝远程库拒绝更新。
 Updates were rejected because the remote contains work that you do
not have locally. This is usually caused by another repository pushing
 to the same ref. You may want to first integrate the remote changes
(e.g., 'git pull ...') before pushing again.
 See the 'Note about fast-forwards' in 'git push --help' for details.

  • 使用git pull( git pull <remote> <branch> ) 拉取远程库,如果pull失败了是本地dev 没有与远程origin/dev建立连接
  • 没有链接,设置连接$ git branch --set-upstream dev origin/dev,再次下拉git pull
  • 如果有冲突,如:
$ git pull
 Auto-merging hello.py CONFLICT (content): Merge conflict in hello.py
 Automatic merge failed; fix conflicts and then commit the result. 

参照之前解决冲突后,git push

  • 不是冲突,但是有新文件,就会要求你合并dev分支
Please enter a commit message to explain why this merge is necessary,
especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.

在这里插入图片描述
这个和linux系统vi编辑文件一样
解决方法:

  1. 按 Esc按钮,退出编辑 输入 :wq 回车提交
  2. 编辑 按 i 键,输入提交信息 在按Esc 输入 :wq 回车退出编辑
  3. 再次push git push

标签管理

  • 发布⼀一个版本时,我们通常先在版本库中打⼀一个标签
  • 唯⼀一确定了打标签时刻的版 本。
  • 取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。

操作步骤

  1. 查看分支git branch
  2. 切换到想要分支git checkout branchname
  3. 打标签git tag <tagname(v1.0)>
  4. 查看标签git tag

默认标签是打在新提交的commit上的。有时候,如果忘了打标签,找到历史提交的commit id 打上即可git tag <tagname> <commit id>

  1. 查看某个标签 git show
  2. 给tag标上说明文字
$ git tag -a <tagname> -m "version 0.1 released" <commit id> 

删除标签

标签打错了删除本地标签git tag -d <tagname>

推送标签到远程

  • 推送单个标签 git push origin <tagname>
  • 推送全部标签 git push origin --tags

删除远程标签

 git push origin :refs/tags/<tagname>

使用github

参与别人的项目

  1. fork(复刻)一份在自己的仓库再克隆到自己的电脑
    在这里插入图片描述
  2. 修复bug,新增功能,往自己的仓库推送。
  3. 想原项目接受你的修改,发一个pull request,对方接受则可以合并。

自定义GIT

让UI显示颜色

$ git config --global color.ui true 

忽略特殊文件

  • 一些不得不放在文件夹,但是不能去追踪的文件,比如:存放密码的文档。
  • 解决方法:建文件.gitignore里面的文件GIT会自动忽略,github上有许多配置好的文件模板可以下载
  • 忽略原则:
  1. 忽略系统自动生成的文件
  2. 忽略中间可执行文件
  3. 敏感信息配置文件
  4. 举例(例子来自《Git 教程 by 廖雪峰》)
  • 假设你在Windows下进⾏行Python开发,Windows会⾃自动在有图⽚片的⺫⽬目录下⽣生成隐藏的缩略 图⽂文件,如果有⾃自定义⺫⽬目录,⺫⽬目录下就会有Desktop.ini⽂文件,因此你需要忽略Windows⾃自 动⽣生成的垃圾⽂文件:
# Windows:
 Thumbs.db 
 ehthumbs.db 
 Desktop.ini 
  • 然后,继续忽略Python编译产⽣生的.pyc、.pyo、dist等⽂文件或⺫⽬目录:
# Python:
 *.py[cod] 
 *.so 
 *.egg
  *.egg-info 
  dist 
  build 

完整文件:

# Windows:
 Thumbs.db 
 ehthumbs.db 
 Desktop.ini 
 # Python:
 *.py[cod] 
 *.so 
 *.egg
 *.egg-info 
  dist 
  build 
  # My configurations:
  db.ini 
  deploy_key_rsa 

ps:windows下不能新建.gitignore文件会提示输入文件名,但是文档编辑器可以另存为这个文件

配置别名

  • 将st 表示status
$ git config --global alias.st status 

输入git st可以表示git status

  • 还可以配置短句指令
git config --global alias.unstage 'reset HEAD'

就可以使用git unstage test.py表示$ git reset HEAD test.py

  • 尝试丰富log可以产看的
$ git config --global alias.lg "log --color --graph -pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 

图片来自《Git 教程 by 廖雪峰》

结束

Git是为Linux源代码托管而研发的,可以使用UbuntuDebian系统的电脑,当然在windows下肯定能用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值