[Git]入门及其常用命令

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
www.cnblogs.com/cnb-yuchen/...

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

参考笔记二,P79~81;笔记三,P52.1。
注:本文中所有命令的执行位置:工作区(项目文件夹)→ 右键 → Git Bash Here。

目录

  • 1、概述

  • 2、常用命令

  • 3、特殊需求

    • [3.1 pull部分代码](#3.1 pull部分代码 "#31-pull%E9%83%A8%E5%88%86%E4%BB%A3%E7%A0%81")

    • [3.2 暂存代码](#3.2 暂存代码 "#32-%E6%9A%82%E5%AD%98%E4%BB%A3%E7%A0%81")

    • [3.3 删除日志](#3.3 删除日志 "#33-%E5%88%A0%E9%99%A4%E6%97%A5%E5%BF%97")

      • [3.3.1 删除所有日志](#3.3.1 删除所有日志 "#331-%E5%88%A0%E9%99%A4%E6%89%80%E6%9C%89%E6%97%A5%E5%BF%97")
      • [3.3.2 删除部分或指定日志](#3.3.2 删除部分或指定日志 "#332-%E5%88%A0%E9%99%A4%E9%83%A8%E5%88%86%E6%88%96%E6%8C%87%E5%AE%9A%E6%97%A5%E5%BF%97")
  • 4、注意事项

  • 最后

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、常用命令

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

  • 配置相关命令
js 复制代码
git --version    // 查看git版本,可用于判断git是否安装成功
git status    // 查看本地库状态
git config --list/user.name    // 查看git配置
git config [--global] user.name yuchen    // 设置配置,这里是"用户署名"
git config --global --unset user.name   // 取消用户署名
  • 分支相关命令
js 复制代码
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=别名/远程分支 本地分支		// 本地分支关联远程分支。注:远程分支存在
  • 别名相关命令
js 复制代码
git remote -v    // 查看别名
git remote show 分支名    // 查看别名
git remote add 别名 url    // 设置别名
git remote rename 旧别名 新别名    // 重命名别名
git remote remove 别名    // 取消别名
  • 运行相关命令
js 复制代码
git init    // 初始化本地库
git clone 别名/url    // 克隆,等同于拉取、设置别名、初始化本地库三个操作
git push -f url/别名 分支	// 强制推送,-f 也可以置于最后
  • 日志相关命令
js 复制代码
git reflog    // 查看日志
git log    // 查看详细日志
git log --name-only    // 查看变动文件和内容
  • 版本相关命令
js 复制代码
git reset --hard 版本号    // 版本回退,"版本号"在日志内可以看到
git reset --hard 当前分支~2		// 回退到前2个版本

git diff 版本1 版本2    // 查看版本差异
git diff 版本1 版本2 --stat    // 查看变动文件
git diff 版本号    // 查看工作区与此版本文件差异
  • 文件相关命令
js 复制代码
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	// 压缩包

注:

  1. --global指全局(~/.gitconfig文件),如:git config --global user.name yc,设置全局用户署名;而每个本地库都有独立的 git 配置(.git/config),如:git config user.name yc,设置局部 / 本地用户署名。
    注:本地配置不会继承全局配置,且前者优先级高于后者。
  2. git reset --hard ...命令只能实现版本回退,不能"前进",因为回退后后面的版本会删除(包括日志),可以重新pull恢复;若版本回退后push,远程日志也会删除。
    注:可作为一种删除远程日志的方法。

3、特殊需求

3.1 pull部分代码

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

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

方法:

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.2 暂存代码

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

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

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

3.3 删除日志

3.3.1 删除所有日志

实现步骤:

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

示例:

js 复制代码
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分支仍存在),它会建立一个"保存点"(整个工作区默认为一个提交记录),在提交之前若修改代码,则是另一个提交记录,不会与上一个提交记录合并。

3.3.2 删除部分或指定日志

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

方法一:版本回退。(见【常用命令】结尾注释)

(后续补充)

4、注意事项

  1. 代码提交是提交到本地库,具体说是提交到本地分支 ,故各分支都有各自的提交记录。因此,切换分支,文件也会切换(切换至切换后的分支所在的版本)。
  2. 提交不能绕过暂存区("小乌龟"为提交自动做了add操作),只要数据存在于暂存区,可直接提交。并且,文件只要提交过,后续变动不需要再add至暂存区,可直接提交。
  3. git 默认分支 / 主分支为master,首次提交时会自动生成 master 分支文件。若先切换分支(如:新分支是hot),再删除所有分支,则 hot 变为主分支。
  4. 当两个分支中的某同一文件的某同一行代码不同,合并时会出现版本冲突
    解决方法:找到冲突文件中的冲突代码,手动删除多余代码,再提交。(这就是解决版本冲突的方法,无论版本冲突由何故引起)
  5. 无法将一个分支的文件直接提交至另一个分支,且push分支必须相同 ,若远程分支不存在,将自动创建。目前,gitee 官网不支持删除分支功能,只能在本地使用命令删除远程分支(见上)。
    注:上文命令中有一个"强制推送"命令,此"强制"不是指"跨分支",而是如上文【删除日志】中"更改分支"再建立关联后的"强制推送"。
  6. 拉取时,若本地库所在文件夹名与中央库项目名不一致 ,无法拉取,需在拉取命令后添加:--allow -unrelated-histories
  7. 在修改文件夹或文件名时,若仅是大小写的改变, git 可能无法识别(认为未修改),因为配置core.ignorecase默认值为true,即忽略大小写。

最后

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

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

本文完结。

相关推荐
_君莫笑6 小时前
大厂Git使用规范
git
无心水13 小时前
【Hermes:安全、权限与生产环境】39、智能体也会犯错?Hermes 纠错、回滚与遗忘机制全指南 —— 让 AI 的错误像 Git 一样可逆可控
人工智能·git·安全·mcp协议·openclaw·hermes·honcho
南境十里·墨染春水18 小时前
linux学习进展 git详解
linux·git·学习
zhangfeng113318 小时前
CodeBuddy ai对话框上面的git docs terminal Rulds 干嘛用的,以thinkphp fastadmin 为例,插件市场
人工智能·git·编程
OYangxf19 小时前
Git Conflict Resolution
大数据·git·elasticsearch
高斯林.神犇19 小时前
Git全套流程
git
次元工程师!21 小时前
LangFlow开发(一)—安装和部署
git·python·大模型·langflow
怣疯knight21 小时前
【无标题】
git
Jim-zf1 天前
git 锁文件
git
lcx_defender1 天前
Git常见操作与指令
git