首页 > 其他分享 >Git学习笔记

Git学习笔记

时间:2023-03-30 15:33:14浏览次数:51  
标签:Git git 提交 笔记 学习 文件夹 版本 分支

《Git学习笔记》

一、词汇概念说明

Git的用途

Git是目前世界上最先进的分布式版本控制系统(没有之一)。其实就是用来管理文件内容变动的一个工具,即一个可下载安装的软件程序。

具体的作用即解决的痛点问题,详见:https://www.liaoxuefeng.com/wiki/896043488029600/896067008724000

下载地址:https://git-scm.com/downloads

其实有个很全的学习资料汇总:https://gitee.com/all-about-git

工作区(Working Directory)、暂存区、Head

工作区简单来说就是你电脑上的某个目录即文件夹,实际概念。
暂存区就是临时保存文件变动的一个地方,抽象概念。
Head即一个指针或标识,指向最后一次提交的结果,抽象概念。

版本库(Repository)

版本库又名仓库,英文名repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

其它

分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!

二、常用Git命令

要想使用Git,首先需要下载安装git程序。然后需要一个远程Git服务器,比如说Gitee,以便将自己本地的变更推送到远程。

另外本机需要整一个SSH 公钥,以便和远程Git服务器交互,这个公钥就是自己电脑的身份证,当然需要远程Git服务器配置好该公钥。

具体可参考:https://git-scm.com/book/zh/v2/服务器上的-Git-生成-SSH-公钥

基本操作

  • 查看本机是否存在ssh: cd ~/.ssh

  • 创建ssh: ssh-keygen

  • 查看ssh:cat ~/.ssh/id_rsa.pub

  • 查看全局配置,其中可以看到配置的用户名和邮箱:git config --global --list

  • 配置用户名和邮箱

    • git config --global user.name "xxx"
    • git config --global user.email "xxx@xxx"
  • 进入d盘的AMyProject文件夹,或进入某个git库(.git 文件夹所在的文件夹):cd d:/AMyProject注意:文件名称不要用中文,git对中文支持不算给力

  • 查看当前所在的文件夹:pwd

  • 创建一个空文件夹:

    mkdir d:/test/directory1 //在D盘创建 test/directory1 文件夹
    cd d:/test/directory1 //进入d盘的test/directory1 文件夹

提交代码到远程服务器

巨简单,可以参考:https://gitee.com/help/articles/4122

以从本地提交到码云为例:

前提:本机安装了git,且生成了ssh,配置了用户名和邮箱,网络连接正常,且假设远程已经有了一个仓库,名为:my-proj001。

先将远程仓库代码拉取到本地某个空文件夹下:
在该空文件夹下右击,点击【git brush here】菜单项,输入:git clone https://gitee.com/idasheng/my-proj001.git ,回车后该仓库代码就会下载到该文件夹下。

之后假如修改了某几个文件,想要提交到远程需要这三步:

git add .

git commit -m "修改几个文件,这是说明"

git push origin master

git常用命令说明

  • git init
    在当前目录新建一个Git代码库,即使当前文件夹中子文件或子文件夹可被git管理,此时文件夹内会自动生成一个隐藏的.git文件。

  • git init d:/Test/Proj1
    新建一个目录:Proj1,将其初始化为Git代码库

  • git add .
    把要提交的修改放到暂存区(Stage),add后面的点表示所有更改的文件

  • git commit -m "本次提交的说明"
    用命令git commit告诉Git,一次性把暂存区的所有修改提交到分支,-m后面输入的是本次提交的说明,这样你就能从历史记录里方便地找到改动记录。

    注意:commit只是将当前加入到暂存区的内容提交到git。如果你先第一次修改,再add,第二次修改,然后commit,那么提交的只是第一次修改后的内容。

    Git跟踪并管理的是修改(add 到stage的内容),而非文件。每次修改,如果不用git add到暂存区,那就不会加入到commit中。

  • git remote add origin <远程git库ssh地址>
    要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git
    如:git remote add origin [email protected]:idasheng/vue_h5_css3_learnning.git

    关联后,使用命令git push -u origin master第一次推送master分支的所有内容
    此后,每次本地commit后,只要有必要,就可以使用命令git push origin master推送最新修改到远程

分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!

  • git status 用于查看当前仓库的状态,即子文件中(工作区)内容相对于版本库中的有没有内容变动

  • git diff 查看当前仓库的内容的具体变化(即看到新旧内容的对比效果)

  • git log查看最近到最远的提交日志,如果你嫌弃输出信息太多,看的眼花缭乱的,可以用git log --pretty=oneline。另外出现冒号或end提示,你输入q再回车就正常了。

  • git pull 从关联的远程库拉取内容

  • git checkout --readme.txt

    撤销更改,让readme.txt文件在工作区的修改全部撤销,这里有两种情况:

    一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

    一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区时的状态。

    总之,就是让这个文件回到最近一次 git commitgit add 时的状态。

  • git -m test.txt
    想删除文件,那么可以先在工作区即文件夹中手动删除相关文件,然后在用命令:git -m test.txt ,然后再commit就行了。

  • git push origin master

    将本地的提交同步到远程主分支

  • Head,版本回退

    在git中,HEAD 标识当前版本,也就是最新的提交,上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
    git reset --hard HEAD^ //版本回退到上一次提交时的内容。注意:HEAD^那部分可以换成某个版本号即提交ID,版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了,一般可以只写前6位就行。如:git reset --hard 1094a
    git refog //用来记录你的每一个命令
    总结:
    HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
    穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
    要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

三、注意点

  • 所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
    不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动
  • 因为文本是有编码的,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。

分支:有点像小说里的主身和次身中的次身。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

git checkout -b dev 。git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
git branch dev //创建分支
git checkout dev //切换至某一分支
git branch命令会列出所有分支,当前分支前面会标一个*号。
git merge命令用于合并指定分支到当前分支。

用git log --graph命令可以看到分支合并图。

四、在实际开发中,我们应该按照几个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

五、.gitignore文件,使其修改后生效的办法

参考:https://zhuanlan.zhihu.com/p/36352553

git rm -r --cached . 
git add .
git commit -m "更新.gitignore"
git push origin master

image-20210305144426084

参考链接

菜鸟教程—Git简明指南

码云—如何提交第一行代码

廖雪峰—Git教程


最近更新于:2023-3-30

标签:Git,git,提交,笔记,学习,文件夹,版本,分支
From: https://www.cnblogs.com/idasheng/p/17272935.html

相关文章

  • ORB_SLAM3源码阅读笔记(一)
    本文参考赵旭辉博士的ORB_SLAM3源码阅读记录以及自己的源码阅读进行随笔记录,详细内容可参考链接一、结构  算法整体上需要关注的是三个线程,阅读源码的过程中也始终以这......
  • VUE3基础笔记
    date:2023-3-3010:00:00categories:-前端系列tags:-VUEtitle:VUE3基础笔记视频地址:2022最新Vue零基础小白入门教程,从入门到精通,快速上手简单易懂_哔哩哔哩_b......
  • 深度学习(二)--神经网络
    一:神经网络的历史神经网络的发展可谓经历了一波三折:神经网络的发展过程二:M-P模型三:感知机四:多层感知机五:误差反向传播函数六:误差函数和激活函数七:似然函数八:随机梯度下降法......
  • python学习(二)
    1Python中的标识符和保留字有的单词赋予了特定的意义,在给对象起名字时不能使用例如代码:importkeywordprint(keyword.kwlist)结果:['False','None','True','and......
  • 讲一个项目提交到gitee中
    $gitinitInitializedemptyGitrepositoryinF:/rosjava/rosjava_mvn_repo-kinetic/.git/$gitcheckout-bkineticSwitchedtoanewbranch'kinetic'$ gitconfi......
  • git部署django上线
    网站部署上线需要环境:centos需要的依赖组件:python3.9先下载wgethttps://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz解压编译安装tar-xvfPython-3.9.5......
  • python+playwright 学习-42 离线安装 playwright 环境
    前言有些同学可能是在公司局域网办公,无法连到外网去在线下载,本篇教大家在本地局域网部署好playwright环境playwright本地下载先找个有网络的电脑,下载playwright,不要......
  • git 常用命令
    自用命令git命令初始化git ->gitinit1、新项目添加到dev分支中(新项目已放到本地.git所在目录下)(1)有.git的项目目录右键运行GitBashHere(2)在打开的命令窗口中输入......
  • IM跨平台技术学习(七):得物基于Electron开发客服IM桌面端的技术实践
    本文由得物技术团队Uni分享,即时通讯网收录时有内容修订和排版优化。一、引言本文要分享的是得物技术团队基于Electron开发客服IM桌面端的技术实践过程,内容包括桌面技术......
  • 【HMS Core】FAQ之机器学习服务知多少
    【问题描述1】使用骨骼点驱动虚拟人偶,华为是否提供相关能力以及可使用的API?【解决方案】API请参考下图:参考链接:https://developer.huawei.com/consumer/cn/doc/development/......