首页 > 其他分享 >[Git]入门及其常用命令

[Git]入门及其常用命令

时间:2024-01-29 09:56:30浏览次数:24  
标签:pull git 入门 文件 -- Git 常用命令 日志 分支

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
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、常用命令

  • 配置相关命令
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	// 压缩包

注:

  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部分代码即可。

方法:

# 此配置具体情况暂不知,目的是开启 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. 暂存区的结构类似“”(先进后出);
  3. apply相当于peek()pop相当于pop()
  4. 那位博主说stash@{0}是“别名”,我更愿意称之为“索引”,不指定时为“栈顶”。

3.3 删除日志

3.3.1 删除所有日志

实现步骤:

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

示例:

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. 提交不能绕过暂存区(tortoiseGit工具的提交自动做了add操作);
  3. 只要数据存在于暂存区,可直接提交;
  4. git默认主分支为master,首次提交时会自动生成 master 分支文件。若先切换分支(如:新分支是hot),再删除所有分支,则 hot 变为主分支;
  5. 文件只要提交过,后续变动不需要再add至暂存区,可直接commit
  6. 无法将一个分支的文件直接提交至另一个分支;
  7. 当两个分支中的某同一文件的某同一行代码不同,合并时会出现版本冲突。解决方法:找到冲突文件中的冲突代码,手动删除多余代码,再提交;(这就是解决版本冲突的方法,无论版本冲突是何故引起)
  8. push分支必须对应
  9. 拉取时,若本地库所在文件夹名与中央库项目名不一致,无法拉取,需要使用拉取命令:git pull 别名/url 分支名 --allow -unrelated-histories
  10. 在修改文件夹或文件名时,若仅是大小写的改变, 可能git无法识别(认为未修改),因为配置core.ignorecase默认值为true,即忽略大小写。
  11. 本地配置不会继承全局配置,且前者优先级高于后者。

最后

创作这篇文章的初衷,是为了方便大家回顾git常用命令和使用细节,而不用查阅大量资源寻找。

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

本文记录的命令比较多,大家可以直接(ctrl + F)搜索。

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

本文完结。

标签:pull,git,入门,文件,--,Git,常用命令,日志,分支
From: https://www.cnblogs.com/cnb-yuchen/p/17993832

相关文章

  • 【亲测管用】解决GitHub clone太慢或者远端意外挂断
    目录解决办法1使用GitHub的镜像,将代码库链接中的“github.com”替换为“github.com.cnpmjs.org”,如图所示:解决办法2将GitHub中的代码库导入码云,然后再进行clone返回目录方案1:github.com.cnpmjs.org返回目录使用GitHub的镜像,将代码库链接中的“github.com”替换为......
  • WebAssembly入门笔记[3]:利用Table传递引用
    在《WebAssembly入门笔记[2]》中,我们介绍了如何利用Memory在作为宿主的JavaScript应用和wasm模块之间传递数据,但是Memory面向单纯二进制字节的读写在使用起来还是不太方便,此时我们会更多地用到另一个重要的对象Table。Table利用用来存储一组指定类型的对象,说得准确一点是对象的引......
  • 数学建模入门笔记(3) 插值与拟合
    插值与拟合插值和拟合的区别:拟合不要求过每一个已知点,而插值要求过每一个已知点,因而插值可以看作过每一个点的拟合。插值适用于补全缺失值,因为使用一般拟合就有可能使已知值偏移,不符合需求。据说PS用某种样条插值,放大的时候最大程度的保留连续性,因此显得不是那么模糊.数学建模......
  • Typora中上传图片:使用PigGo+Gitee
    设置FFS程序下载安装程序出现两个程序。FreeFileSync是主程序,RealTimeSync用来设置自动同步打开FreeFileSync主程序,点击蓝色设置按钮比较设置界面同步设置界面一般设置双向,即只要有一边变化即同步。为了保险起见,设置保留历史版本最后确定设置需要同步的文件夹......
  • git笔试面试题
     收集整理几个git相关的笔试面试题 1、你们公司版本是如何管理的?细说一下 2、如何创建分支? 3、gitclone、gitpull、gitfetch、gitpush的区别是? 4、merge和rebase的区别是? 5、gitpull和gitpull--rebase的区别是? 6、代码提交到本地仓库后,发现提交日志写错了,如何修改? ......
  • Git取消add 、 commit、push的命令
    1.撤销已经add,但是没有commit的问题gitresetHEAD2.撤销已经commit,但是没有push到远端的文件(仅撤销commit保留add操作)撤销上一次的提交gitreset--softHEAD^ windows系统使用提示more,需要多加一个^(windows当中^才是换行符?)gitreset--softHEAD^^按照输入的数字撤销输入......
  • 【ElasticSearch】入门-基础概念
    什么是ES?是一个高可用分布式的搜索引擎。可以用于实时存储、检索数据。底层是使用Lucene全文检索框架。基本概念存储结构:由_index_type和_id标识唯一的一个文档_index:指向一个或多个物理分片的逻辑命名空间_type:用于区分同一个集合中的不同的细分(ES6.X中只允许一个i......
  • centos7安装gitLab
    yum安装安装opensshsudoyuminstall-ycurlpolicycoreutils-pythonopenssh-serverperlsudosystemctlenablesshdsudosystemctlstartsshd安装gitLab#配置镜像源curl-fsSLhttps://packages.gitlab.cn/repository/raw/scripts/setup.sh|/bin/bash#yum安......
  • 云原生架构中 GitOps 的最佳实践
    GitOps是一种基于Git的离散交付和部署的操作框架模型,它使开发者使用Git,而不是传统的连续交付管道,来进行集群管理和应用程序部署。在这篇文章中,我们将详细探讨GitOps的最佳实践。使用声明性API构建你的系统在GitOps中,你需要描述系统应有的状态而不是描述达到这个状态须......
  • github pages+hexo
    首先使用hexo要先安装noded.js和gitgit我早就安装过了,所以只要安装Node.js我使用nvs安装了Node.js(v21.0.0版本)然后使用这行命令安装Hexo:然后需要先在d盘创建hexo文件夹然后hexoinithexo:我开了vpn,所以在hexoinithexo之前我需要先配置gitconfig--globalhttp,不然git......