git学习笔记
🌜 🌜 🌜
linux基础命令,git操作…
Linux基础命令
一. 目录命令
1、目录切换命令
cd usr: 切换到该目录下usr目录cd ..(或cd../): 切换到上一层目录cd /: 切换到系统根目录cd ~: 切换到用户主目录 (root用户就是/root,普通用户就是/home)cd -: 切换到上一个操作所在目录cd /tmp/test: 使用绝对路径切换cd test: 使用相对路径
2、目录操作命令
1). mkdir 目录名称: 增加目录
示例:
- mkdir test
- mkdir-p test/a/b/c:创建多级目录(使用相对路径)
- mkdir-p/opt/test/aa/cc:创建多级目录(使用绝对路径)
2). ls或者ll:(ll是ls -l的别名,ll命令可以看到该目录下的所有目录和文件的详细信息):查看目录信息
参数:
-l以列表形式查看-h以一种人性化的方式查看,也是文件的大小以合适的单位显示-a查看所有文件,包括隐藏文件-i显示出文件的i节点号
3). find 目录 参数: 寻找目录(查)
4). pwd: 查看所在目录位置
示例:
- 列出当前目录及子目录下所有文件和文件夹:
find . - 在/home目录下查找以.txt结尾的文件名:
find /home -name "*.txt" - 同上,但忽略大小写:
find /home -iname "*.txt" - 当前目录及子目录下查找所有以.txt和.pdf结尾的文件:
find . \( -name "*.txt" -o -name "*.pdf" \)或find . -name "*.txt" -o -name "*.pdf"
5). mv 目录名称 新目录名称: 修改目录的名称,或移动目录的位置—剪切(改)
注意:mv语法不仅可以对目录进行剪切操作,对文件和压缩包等都可执行剪切操作。另外mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
参数说明:
- -i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
- -f: 在mv操作要覆盖某已有的目标文件时不给任何指示;
| 命令格式 | 运行结果 |
|---|---|
| mv文件名 文件名 | 将源文件名改为目标文件名 |
| mv 文件名 目录名 | 将文件移动到目标目录 |
| mv 目录名 目录名 | 目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名 |
将info目录放入logs目录中。注意,如果logs目录不存在,则该命令将info改名为logs。
mv info/ logs
再如将/usr/student下的所有文件和目录移到当前目录下,命令行为:
$ mv /usr/student/* .
7). cp -r 目录名称 目录拷贝的目标位置: 拷贝目录(改),-r代表递归拷贝
注意:cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不 用写-r递归
参数:
-a=-pdr-p同时复制文件属性,比如修改日期-d复制时保留文件链接-r复制文件夹时,递归复制子文件夹-l不复制,而是创建指向源文件的链接文件,链接文件名由目标文件给出。note:可以在拷贝的同时重命名
rm [-rf] 目录: 删除目录(删)
注意:rm不仅可以删除目录,也可以删除其他文件或压缩包,为了增强大家的记忆, 无论删除任何目录或文件,都直接使用rm -rf 目录/文件/压缩包
参数:
-r:递归删除-f:强制删除 即没有提醒
二. 文件命令
1、文件操作命令
1). touch 文件名称: 文件的创建(增)
创建文件 可以一次创建多个文件,以空格隔开
2). cat/more/less/tail 文件名称: 文件的查看(查)
-n:带行号
cat: 查看显示文件内容tac:反向显示文件内容more: 分页查看文件内容: 可以显示百分比,回车可以向下一行, 空格可以向下一页,q可以退出查看
操作参数:
进入浏览模式后:
- f或者空格:下一页
- enter:一行一行往下翻
- q:退出
less: 可以使用键盘上的PgUp和PgDn向上 和向下翻页,q结束查看
-l以列表形式查看-h以一种人性化的方式查看,也是文件的大小以合适的单位显示--a查看所有文件,包括隐藏文件-i显示出文件的i节点号
操作参数:
- 空格翻页
- 回车换行
- pageup:上一页
- pagedown:下一页
- 上箭头:向上翻
- 下箭头:向下翻
- /搜索词 n向下找
head -n : 查看文件前n行。缺省-n显示前10行tail-10 : 查看文件的后10行,Ctrl+C结束
注意:命令 tail -f 文件 可以动态显示文件末尾内容,对某个文件进行动态监控,例如tomcat的日志文件, 会随着程序的运行,日志会变化,可以使用tail -f catalina-2016-11-11.log 监控文件的变化
in: 链接命令
-s创建软连接
硬链接和cp -p的区别是硬链接会同步更新
源文件如果丢失,硬链接依然存在。
硬链接和源文件的i节点相同。
硬链接不能夸分区,软连接可以跨分区。
硬链接不可以链接目录,链接可以
软连接文件具有的权限是ugo都是rwx
rm -rf 文件: 删除文件(删)
同目录删除:熟记 rm -rf 文件 即可
2、vim文件操作命令
vim编辑器是Linux中的强大组件,是vi编辑器的加强版,vim编辑器的命令和快捷方式有很多,但此处不一一阐述,大家也无需研究的很透彻,使用vim编辑修改文件的方式基本会使用就可以了。
在实际开发中,使用vim编辑器主要作用就是修改配置文件,下面是一般步骤:
vim 文件———>进入文件——->命令模式———>按i进入编辑模式——->编辑文件 ———->按Esc进入底行模式——->输入:wq/q! (输入wq代表写入内容并退出,即保存;输入q!代表强制退出不保存。)
1). i,a: 命令模式–>编辑模式
2). ecs: 编辑模式–>命令模式(底行模式)
3). 命令模式(底行模式下):
q!: 强制退出q: 退出wq: 保存并退出 (wq以及wq!,则不管有没有修改,都会强制更新修改时间,有时没修改的东西会让人误以为改了)wq!: 保存并强制退出x: 保存并退出(个人推荐使用,:x在由修改操作时会保存并退出,更新修改时间)
4). set nu: 显示行号 set nonu: 取消行号
5). 翻页查看:
- 上一页:page up
- 下一页: page down
6). 跳转到指定的行:
gg: 跳转到第一行G: 跳转到最后一行100G: 跳转到指定行,如100G就是第100行,nG:第n行
7). /要查找的内容: 查找
8). yy: 复制当前行
9). p: 粘贴到当前所在行的下一行
- 粘贴一次就输入一个p
- 多次就多个p,如10p就粘贴10次
10). 查找并替换:
方式一::开始行号,结束行号s/查找的单词/替换的单词
如:1,3s/f/XXX: 替换1到3行的f为XXX1,$s/f/YYY: 替换1到所有行的f为YYY
方式二:gc方式
%s/aaa/bbb/gc 意思就是检索所有行,挨个询问替换aaa为bbb,手动判断y是替换,n是不替换,a是替换所有,q是退出。
参数:
y - yes替换n - no不替换a - all替换所有q - quit退出替换l - last最后一个,并把光标移动到行首^E向下滚屏- ^Y 向上滚屏
11). u: 撤销操作
Git命令行操作
托管中心维护远程库
- 内网:可以自己搭建一个GitLab服务器
- 外网:可以使用码云、Github
版本控制工具
- 集中式:CSV ,SVN,VSS
- 分布式:Git,Darcs,…

1.1本地库初始化
进入文件夹
1 | git init |
1.2设置签名
项目(仓库)级别
仅在当前本地库有效1
2git config user.name tom #设置用户名tom
git config user.email [email protected] #设置用户邮箱系统用户级别
仅在当前登录的操作系统用户有效1
2git config --global user.name tom
git config --global user.email [email protected]
仅仅加了一个
--global优先级别:
项目级别>系统级别信息保存位置:
~/.gitconfig 文件
1.3基本操作
1.3.1 状态查看
1 | git status #查看工作区、暂存区状态 |
1.3.2 添加
1 | git add fileName #指定文件 |
1.3.3 提交
1 | git commit -m 'commit message' fileName |
1.3.4 查看历史记录
1 | git log |
1.3.5 前进后退
基于索引值
推荐1
2git reset --hard 指针位置
例子:git reset --hard a6ace91 #回到这个状态使用 ^ 符号
只能后退1
2
3git reset --hard HEAD^
例子:git reset --hard HEAD^^
注意:几个 ^ 表示后退几步使用 ~ 符号
只能后退1
2git reset --hard HEAD~n
例子:git reset --hard HEAD~3
1.3.6 reset的三个参数比较
1 | soft: |
1.3.7 删除文件并找回
- 相当于建立一个快照,虽然删除了,但只要添加到暂存区,就能找回
1 | rm text.txt #删除文件 |
1 | git diff 文件名 #和暂存区进行比较 |
2.2 分支管理

hot_fix master feature_x feature_y
2.2.1 什么是分支管理
- 在版本控制中,使用多条线推进多个任务
2.2.2 分支的好处
- 同时并行推进多个功能开发,提高开发效率
- 某一分支开发失败,不会对其它分支有任何影响,失败的分支删除重新开始即可
2.2.3 分支操作
- 创建分支
1 | git branch 分支名 |
- 查看分支
1 | git branch |
- 切换分支
1 | git checkout 分支名 |
- 合并分支
相当于把修改了的文件拉过来
1 | git merge xxx |
- 删除分支
1 | git branch -d 分支名 |
2.2.4 解决冲突
冲突的表现

- 两个分支同时修改一个文件合并时发生冲突
冲突的解决
- 第一步:编辑,删除特殊标记
<<<=== - 第二步:修改到满意位置,保存退出
- 第三步:添加到缓存区
git add 文件名 - 第四步:提交到本地库
git commit -m '日志信息'注意:后面一定不能带文件名
- 第一步:编辑,删除特殊标记
Git 结合Github
别名 分支名

1.1 创建远程库地址别名
1 | git remote -v #查看远程地址别名 |
1.2 推送
开发修改完把本地库的文件推送到远程仓库 前提是提交到了本地库才可以推送
1 | git push 别名 分支名 |
1.3 克隆
克隆下来后不要在主分支里面做开发 clone进行一次,从无到有的过程,更新用pull
1 | git clone 远程地址 |
- 完整的把远程库克隆到本地
- 创建origin远程地址别名
- 初始化本地库
常见错误
当我们使用git clone指令从github 上download其它优秀的代码时,如果报如下错误
1 | RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054 |
这是因为服务器的SSL证书没有经过第三方机构的签署,所以才报错。解决方案如下: 第一步,克隆远程仓库时,用env命令设置GIT_SSL_NO_VERIFY环境变量为”ture”,并同时调用正常的git clone命令。完整的命令如下:
1 | env GIT_SSL_NO_VERIFY=true git clone https://<host_name/git/project.git |
第二步,在克隆完毕的仓库中将http.sslVerify设置为”false”。完整的命令如下:
1 | git config http.sslVerify "false" |
1.4 拉取
本地存在clone下来的文件 就用pull更新
1 | pull = fetch + merge |
1.5 解决冲突
注意:解决冲突后的提交是不能带文件名的
如果不是基于远程库最新版做的修改不能推送,必须先pull下来安照“分支冲突办法”解决
1.6 rebase
提交记录简洁不分叉 没学懂,感觉有点鸡肋 混眼熟
1 | git rebase -i 索引号 |
1.7 beyond compare
用软件解决冲突
1 | 1.安装 : |
1.8 跨团队合作

代码review之后合并
适用于个人
邀请成员:
Settings—>Collaborators—>填写用户名—>打开链接接受邀请企业
创建一个组织方便管理review
组织做review通过Pull request给开源社区共享代码
点击别人仓库的fork 到自己的仓库— >然后clone下来 修改后推送到远程库—>点击Pull Request请求—>Create pull request发消息
1.9 Tag标签
为了清晰的版本管理,公司一般不会直接使用commit提交
1 | git tag -a v1.0 -m '版本介绍' #创建本地tag信息 |
1.10 SSH 免密登录
- 输入:
ssh-keygen -t rsa -C GitHub邮箱地址 - 进入
.ssh目录,复制id_rsa.pub文件内容 - 登录GitHub。
Settings—>SSH and GPG keys—>New SSH Key - 回到git通过ssh地址创建。
git remote add 别名 SSH地址
Git工作流
1.1 概念
1 | 在项目开发过程中使用Git的方式 |
1.2 分类
1.2.1 集中式工作流
1 | 像SVN一样,集中式工作流有一个中央仓库,所有的修改都提交到了Master分支上 |
1.2.2 GitFlow工作流 *
主干分支master 开发分支develop 修复分支hotfix 预发布分支release 功能分支feature
1 | GitFlow 有独立的分支,让发布迭代过程更流畅。 |
1.2.3 Forking 工作流
1 | 在 GitFlow 基础上, 充分利用了 Git 的 Fork 和 pull request 的功能以达到代码审核的目的。 |
- 本文作者:
腾飞
- 本文链接:
https://www.tengfei.eu.org/article/f5f0db78.html
- 版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!