【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)

https://www.cnblogs.com/cnb-yuchen/p/17993832

出自【进步*于辰的博客

Git 的难点在于细节很多,一般很难一次性掌握。若想快速学会乃至掌握,就需要查阅博文、视频等资料,手打测试一些常用命令。

参考笔记二,P79~81;笔记三,P52.1。

注:本文中所有命令的执行位置:工作区(项目文件夹)→ 右键 → Git Bash Here。

1、概述

先提一下SVN,SVN只有远程库,所以只能直接从本地推送到远程库,因此一旦没网络就无法提交。

大家先看个图。



工作区指开发工具;暂存区指介于工作区和本地库之间、用来临时存放变动记录的地方;本地库指项目目录中的.git文件夹(默认隐藏)。

图解:

  • A: 将变动记录存放至暂存区。暂存区是临时保存,因为变动记录一旦提交到本地库,就会生成日志。若需要保存变动记录、又不愿保留日志,执行到这一步即可。

    命令:git add 文件全名
  • B: 撤回保存的变动记录。注意:若是从本地库撤回,已生成的日志不会一并删除(有方法可以删除日志,暂不探究)。

    命令:git rm --cached 文件全名
  • C: 将临时存放的变动记录提交至本地库。

    命令:git commit -m '日志注释' 文件全名

    特例:git commit -m '日志注释'(不标注文件,则提交所有暂存区的变动记录);
  • D: 将变动记录推送至中央库。

    命令:git push 别名/url 分支名
  • E: 拉取所有文件至本地。

    命令:git pull 别名/url 分支名

因此可知,git 保存变动记录不需要网络支持。

2、常用命令

2.1 摘要

命令较多,大家可以直接ctrl + F搜索。

  • 配置相关命令
git --version    // 查看git版本,可用于判断git是否安装成功
git status // 查看本地库状态
git config --list/user.name // 查看git配置
git config [--global] user.name yuchen // 设置配置,这里是“用户署名”
git config --global --unset user.name // 取消用户署名
  • 分支相关命令
git branch -v/--list   // 查看本地有效分支(有提交记录)
git branch -a // 查看本地和远程分支
git branch } grep 'xx' // 模糊查询分支 git branch 分支名 // 根据当前版本创建分支
git checkout -b 分支名 版本号 // 根据指定版本创建并切换分支
git checkout --orphan 分支名 // 创建并切换空分支(无提交记录) git branch -m 分支名 // 分支重命名
git checkout 分支名 // 切换分支
git merge 分支名 // 合并分支 git fetch -p // 清除本地无用分支
git branch -D 分支名 // 删除本地分支
git push 别名/url --delete 分支名 // 删除远程分支 git branch --set-upstream-to=别名/远程分支 本地分支 // 本地分支关联远程分支。注:远程分支存在
  • 别名相关命令
git remote -v    // 查看别名
git remote show 分支名 // 查看别名
git remote add 别名 url // 设置别名
git remote rename 旧别名 新别名 // 重命名别名
git remote remove 别名 // 取消别名
  • 运行相关命令
git init    // 初始化本地库
git clone 别名/url // 克隆,等同于拉取、设置别名、初始化本地库三个操作
git push -f url/别名 分支 // 强制推送,-f 也可以置于最后
  • 日志相关命令
git reflog    // 查看日志
git log // 查看详细日志
git log --name-only // 查看变动文件和内容
  • 版本相关命令
git reset --hard 版本号    // 版本回退,“版本号”在日志内可以看到
git reset --hard 当前分支~2 // 回退到前2个版本 git diff 版本1 版本2 // 查看版本差异
git diff 版本1 版本2 --stat // 查看变动文件
git diff 版本号 // 查看工作区与此版本文件差异
  • 文件相关命令
ll    // 查看旗下文件
ll -a // 查看旗下文件(包括隐藏文件)
cat 文件 // 打开文件
tail -n 行数 文件 // 查看文件具体行(倒数),这也是lunux命令 ssh-keygen -t ed25519 -C "邮箱" // 创建公钥/私钥,后续文章详述
cat ~/.ssh/id_ed25519.pub // 查看公钥
cat ~/.ssh/id_ed25519 // 查看私钥 git archive --format zip --output 文件名.zip HEAD // 压缩包

2.2 命令说明

  1. --global指全局(~/.gitconfig文件),如:git config --global user.name yc,设置全局用户署名;而每个本地库都有独立的 git 配置(.git/config),如:git config user.name yc,设置局部 / 本地用户署名。

    注:本地配置不会继承全局配置,且前者优先级高于后者。
  2. git reset --hard ...命令只能实现版本回退,不能“前进”,因为回退后后面的版本会删除(包括日志),可以重新pull恢复;若版本回退后push,远程日志也会删除。

    注:可作为一种删除远程日志的方法。

PS:大家在上述命令中,肯定有一个发现:“有些参数是大写(如:-D),有些是小写(如:-d)”。

不同是什么?大家查看 Git 帮助文档便可明了,聊表一言。

  1. -D相当于-d -f-f就是--force,作用是“无视”分支合并状态如何,或者是否指向有效的提交。

    注:对于“合并状态”与“有效提交”,暂无法给出解释,需要大家自行研究了。(PS:只要命令没错,小写不成就大写)

3、特殊需求

3.1 介绍

对于“普通的”使用 Git,上文中【常用命令】足以支持,但在工作中,项目级开发中使用 Git 就可能会遇到一些特殊的操作,这些操作需要一系列 Git 命令的“配合”才能完成。

Git 是一个大集成的工具,我们不可能或者说难以将所有的命令都掌握,故往往是“按需学习”。

PS:以下是为我曾遇到的一些“特殊需求”所采用的其中一种解决方案,可供大家参考。

对了,如果大家想要了解更多,可以在下图位置自行查找研究。



这是啥目录就不需要介绍了哈。好吧,此目录中保存着 Git 命令的诸多介绍文档。

其中之一:

3.2 pull部分代码

参考自博文《git只拉取仓库部分代码》(转发)。

如使用 SpringBoot 或 SpringCloud 开发的分布式项目,项目组每个人负责开发不同的模块,这种情况就不需要将全部代码都拉取下来,那样不仅多耗时、耗空间,还会拖慢程序。这时就只需拉取部分代码即可。

官方文档介绍:Git 不支持部分拉取。因此,需要我们自行配置。

当然,Git 子模块可以从另一个角度解决此问题,不过那需要多仓库结合;还有,SVN 是支持部分拉取的,而且操作简单(非本文重心,不作阐述)。因此,以下解决方案适用于单 Git 仓库的情况。

解决方案:

# 此配置具体情况暂不知,目的是开启 sparsecheckout,允许部分拉取
1、git config echo.sparsecheckout true # 配置所需文件/文件夹,xx 是绝对路径(相对于远程库根目录)
2、echo xx >> .git/info/sparse-checkout

注:

  1. 若不开启sparsecheckout,仍可pull成功,但是全部pull
  2. 只要sparsecheckout开启就行,无论是全局配置,还是本地配置。但要注意,如果项目是部分pull下来的,无法直接commit,需要先手动add
  3. 绝对路径xx允许中文;
  4. xx配置示例:(1)文件:目录1/目录2/xx.txt;(2)文件夹:目录1/目录2
  5. 命令2执行后,若是首次执行,则会创建下图文件:

其内容为xx;而若多次执行,则会将xx进行追加。当然,xx也可以任意(事后再打开文件修改),如下图:



不过,要注意,此文件是“一次性”的。什么意思呢?就是指在pull之前,可以无数次修改,但pull之后再修改就没有意义了(前提是第一次pull成功了)。并且即便首次pull成功后再删除此文件,也无意义,而如果在此文件生成之后、首次pull之前,将其删除,则可以恢复全部pull(即配置无效)。

简言之pull部分代码的配置只有一次pull机会,若想pull其他模块或全部模块,只能删除本地库,重新配置。

附图:



这是此本地库对应的远程库根目录。

3.3 暂存代码

推荐一篇博文《git基本使用》(转发),见【暂存代码】。

关于此需求的背景描述和具体实现,大家可查阅推荐文章。实现很简单,不赘述,在此仅稍作说明。

  1. 暂存区可缓存多次(可多次执行git stash);
  2. 暂存区的结构类似$\color{red}{“栈”}$(先进后出);
  3. apply相当于peek()pop相当于pop()
  4. 那位博主说stash@{0}是“别名”,我更愿意称之为“索引”,不指定时为“栈顶”。

PS:大家可能不了解stash,对于此需求,往往用“分支”解决(我也倾向于使用“分支”,stash增加了我对 Git 的了解)。

3.4 删除所有日志

解决方案:

创建空分支(不包含提交记录,即无日志) → 提交所有文件 → 删除旧分支 → 新分支重命名为旧分支 → 关联新分支与远程分支 → 强制推送。

示例:

1、git checkout --orphan 分支名
2、git commit -m '清空日志'
3、git branch -D master
4、git branch -m master
5、git branch --set-upstream-to=origin/master master
6、git push -f origin master

如果大家对哪个命令不熟悉,上面有说明。

补充说明一下git checkout --orphan 分支名这个命令(上面因篇幅原因未具体说明),这个命令用于创建分支,并非空分支(若是从提交记录角度说的确是空分支),分支一旦创建,在提交之前,pullpush都无法执行(即便此时master分支仍存在),它会建立一个“保存点”(整个工作区默认为一个提交记录),在提交之前若修改代码,则是另一个提交记录,不会与上一个提交记录合并。

扩展说明:(为什么此方法可以清空日志)

下图出自 Git 帮助文档。



意思是git delete -d <分支名>可指定多个分支进行删除。如果分支当前有一个 reflog,那么该 reflog 也将被删除。

PS:本地库的 reflog 删除了,中央库的日志自然消失了。

3.5 删除部分或指定日志

删除所有日志操作破坏性太强。

方法一:版本回退。(见【命令说明】的第2点)

(后续补充)

3.6 解决忽略大小写问题

在修改文件夹或文件名时,若仅是大小写的改变, git 可能无法识别(认为未修改),因为配置core.ignorecase默认值为true,即忽略大小写。

下图是忽略大小写推送的结果:



如何删除多余文件?可以使用版本回退,但不推荐,因为对于这种情况,版本界限比较模糊,操作会比较麻烦,我的解决方案是:

移走BJ.txt→ 提交 → 移回BJ.txt→ 提交 → 推送

变动情况如图:



因为忽略大小写后,Git 会将这两个文件视为同一个文件。

4、要点

  1. 代码提交是提交到本地库,具体说是提交到本地分支,故各分支都有各自的提交记录。因此,切换分支,文件也会切换(切换至切换后的分支所在的版本)。
  2. 提交不能绕过暂存区(“小乌龟”为提交自动做了add操作),只要数据存在于暂存区,可直接提交。并且,文件只要提交过,后续变动不需要再add至暂存区,可直接提交。
  3. git 默认分支 / 主分支为master,首次提交时会自动生成 master 分支文件。若先切换分支(如:新分支是hot),再删除所有分支,则 hot 变为主分支。
  4. 无法将一个分支的文件直接提交至另一个分支,且push分支必须相同,若远程分支不存在,将自动创建。目前,gitee 官网不支持删除分支功能,只能在本地使用命令删除远程分支(见上)。

    注:上文命令中有一个“强制推送”命令,此“强制”不是指“跨分支”,而是如上文【删除日志】中“更改分支”再建立关联后的“强制推送”。
  5. 拉取时,若本地库所在文件夹名与中央库项目名不一致,无法拉取,需在拉取命令后添加:--allow -unrelated-histories
  6. 当两个分支中的某同一文件的某同一行代码不同,分支合并时会出现版本冲突。(1)解决方案一:找到冲突文件中的冲突代码,手动删除多余代码,再提交(无论版本冲突由何故引起,推荐使用此方法解决版本冲突);(2)解决方案二:版本回退,需要先备份自己所改动部分。

最后

在本文中,我对git常用命令的阐述方式是列举,并未详述,这样大家可能不太明白命令的具体使用情况及其作用,这就需要大家自行COPY测试了。

如果大家想要了解Git关联远程库的配置方法,可查阅博文《[Git]关联远程库的两种方法及配置》。

本文完结。

[Git]入门及其常用命令的更多相关文章

  1. Git 入门和常用命令详解

    git 使用使用教程   git 使用简易指南  常用 Git 命令清单 下载   https://git-scm.com/downloads 工作流 本地仓库由三部分组成. 工作区:保存实际的文件( ...

  2. Git入门之常用命令(转载阮一峰老师)

    流程图 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓 ...

  3. Git入门及常用命令(1)(window环境下)

    文章参考摘抄自:git教程 1.git的安装 Windows下要使用很多Linux/Unix的工具时,需要Cygwin这样的模拟环境,Git也一样.Cygwin的安装和配置都比较复杂,就不建议你折腾了 ...

  4. Docker 入门指南——常用命令

    前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令. 基本概念 镜像 Image 镜像是一些打包好的已有的环境,可以被用来启动和创建容器 容器 Contai ...

  5. Git安装以及常用命令(图文详解)

    **Git安装以及常用命令** 1.下载安装Git,傻瓜式安装相信大家都会. 官网下载地址:[https://git-scm.com/downloads] 2.Git基本操作 (1)git --ver ...

  6. Git的一些常用命令

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 简单的说就是托管代码的便于多人开发的管理系统. 二.Git的一些命令,我详细的说一下 我是基于github给大家说一下git的一些常 ...

  7. Git Bash Here常用命令以及使用步骤

    1.首先,要clone项目代码: git clone 链接地址 2.更新代码: git pull 3.添加修改过的文件.文件夹: git add 修改过的文件,文件夹 4.提交并注释: git com ...

  8. Docker的入门及常用命令

    Docker入门及常用命令 1. 各个容器之间是相互隔离状态: 这样减少了我们软件之间的影响. 2. docker是os层虚拟化架构的一种产品体现, os层虚拟化架构出来的操作系统需要和宿主机操作系统 ...

  9. Git快速入门和常用命令

    一.快速入门 本地初始化一个项目 首先,你需要执行下面两条命令,作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中. git config --global us ...

  10. git 快速入门及常用命令

    身为技术人员,都知道Git是干嘛的.从服务端角度它是代码仓库,可以多人协作.版本控制.高效处理大型或小型项目所有内容:从客户端讲,它能够方便管理本地分支.且与服务端代码的同步,从拉取.合并.提交等等管 ...

随机推荐

  1. Git识别文件权限修改

    刚打开IDE,工作区的代码状态全部变成修改未提交的状态了?这是这么回事?这是因为Git忽略文件权限或者拥有者改变导致的git状态变化.默认Git会记录文件的权限信息,如果文件的权限信息被修改,在Git ...

  2. 轻松玩转Makefile | 企业项目级Makefile实例

    前言 本文展示了一个比较完整的企业项目级别的Makefile文件,包括了:文件调用,源文件.头文件.库文件指定,软件版本号.宏定义,编译时间,自动目录等内容. 1.目录架构 本文中所采用的目录架构,在 ...

  3. 如何查看Spring Boot 默认的数据库连接池类型

    使用的Spring Boot的版本:2.3.4.RELEASE 先给出答案:com.zaxxer.hikari.HikariDataSource 怎么知道的呢? 新建一个Spring boot项目:s ...

  4. 【Unity3D】半球卷屏特效

    1 原理 ​ 凸镜贴图 和 渐变凸镜贴图 中介绍了使用 OpenGL 实现凸镜贴图及其原理,通过顶点坐标映射到纹理坐标,并构造三角形网格,构建了真正的三维凸镜模型.本文通过 Shader 实现半球卷屏 ...

  5. Linux下SQLPLUS替代工具rlwrap安装使用

    rlwrap工具可以解决linux下sqlplus 提供浏览历史命令行的功能,和删除先前输入错误的字母等问题 1.安装 需要readline包 这个安装光盘就有 [root@asm RedHat]# ...

  6. FTP命令详解(含操作实例)

    以下是微软命令行FTP客户端命令大全,如果你想使用"未加工(RAW)"FTP命令而非下面翻译过的请参考:http://www.nsftools.com/tips/RawFTP.ht ...

  7. Flutter学习(PV)——概览

    接触flutter有一段时间了,趁着刚过完年有点时间,记录一些有用的东西,一方面给自己备忘,另一方面也希望能帮到有需要的人~ 一.什么是flutter Flutter is Google's UI t ...

  8. 网络安全-Linux常用命令

    安装上传下载的软件包 yum install lrzsz -y 下载:linux-->windows sz -y /etc/hosts 上传:windows-->linux rz -y 系 ...

  9. [BAT面试题系列]乐观锁和悲观锁

    基本概念 乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题(使用非常广泛,不局限于某种编程语言或数据库). 乐观锁:乐观锁在操作数据时非常乐观,认为别人不会同时修改数据.因此乐观锁不会上锁, ...

  10. CXP2.0的相机是否可以使用CXP1.1的Grabber

    可以 答案是肯定的. 目前CXP共有2个发布版本: 2011年发布CXP1.1 2021年发布CXP2.1,向后兼容,新标准增加了同步功能.数据率放大了一倍. 只要是符合CXP标准.接插件匹配,那么C ...