git学习(只看git就行了,这是学习的草稿,之后学的更深入会在整理第二版)
目录
前备知识(随笔)
[MIT]计算机科学课堂中学不到的知识 The Missing Semester of Your CS Education(2020)_哔哩哔哩_bilibili
《计算机科学教育中遗漏的一学期|The Missing Semester of Your CS Education 2020》中英字幕_哔哩哔哩_bilibili
英文名词
man->manul 手册
directory 目录、文件夹
cli command line interface 命令行界面
第一讲
shell&&terminal&&command line
Shell是命令解释器(命令解释程序),相当于编译型高级语言的编译器(编译型程序),它本身不是可视化交互界面。
terminal终端,是可视化(图形化)程序,提供了输入/输出命令行的窗口。
command line 命令行,是一种交互方式,指通过输入文本指令(而非点击图形界面)来操作计算机。无实体。
文本编辑器是用于编辑修改文本文件的工具。终端除了文本编辑器所有的功能外还集成了其他功能。
常见的终端
Linux/macOS:GNOME Terminal、Konsole、iTerm2、系统自带的 “终端” App。
Windows:CMD 窗口、PowerShell 窗口、Windows Terminal。

这个其实是终端而非命令行

常见的shell
Bourne Shell(sh):最基础的 shell。
Bash(Bourne Again Shell):Linux/macOS 最常用的默认 shell。
Zsh(Z Shell):macOS 新版默认 shell,功能更丰富。
Fish、csh、ksh 等其他小众 shell。
命令行command lines和shell和terminal终端我们日常通常归为一种东西 ,但是很离谱官方竟然把终端terminal叫做command shell
Windows命令
Windows 有两个命令行 shell:Command shell 和 PowerShell。 每个 shell 都是一个软件程序,提供你和作系统或应用程序之间的直接通信,提供一个环境来自动执行 IT作。
Command shell 是 Windows 中内置的第一个 shell,用于自动执行常规任务(例如用户帐户管理或夜间备份),其中包含批处理(.bat)文件。 使用 Windows 脚本主机,可以在 Command shell 中运行更复杂的脚本。 有关详细信息,请参阅 cscript 或 wscript。 可以使用脚本比使用用户界面更高效地执行作。 脚本接受命令行中提供的所有命令。
PowerShell 旨在扩展 Command shell 的功能,以运行称为 cmdlet 的 PowerShell 命令。 Cmdlet 类似于 Windows 命令,但提供了更可扩展的脚本语言。 可以在 PowerShell 中同时运行 Windows 命令和 PowerShell cmdlet,但 Command shell 只能运行 Windows 命令,而不能运行 PowerShell cmdlet。
官方文档

缺点:不支持知道功能找命令---只能通过搜索引擎或者豆包解决
.\ 是当前目录
常用cml语法
- 创建空文件
echo. > 文件名.txt (注意 echo 和 . 之间有空格,> 是重定向符号)
C:\Users\as825>cd .\desktop\lab4
C:\Users\as825\Desktop\lab4>echo. > 1.txt
C:\Users\as825\Desktop\lab4>
年少的不可得
你想知道能不能完全不装任何额外工具,只靠 Windows 原生的 CMD 来编辑 C 语言文件,对吧?
结论先给你:纯原生 CMD 窗口内(黑窗口里直接打字编辑)做不到,但可以用 CMD 调用系统自带的记事本(Notepad)来编辑,这是最 “直接” 的原生方案,不用装任何东西。
为什么纯 CMD 里没法直接编辑?
Windows 原生 CMD 是 “命令执行器”,不是 “编辑器”:
- 早期 DOS 里的
edit命令(16 位程序),在 64 位 Windows 里已经被彻底移除,所以你输入edit test.c会提示 “不是内部或外部命令”; - Windows 没有像 Linux 那样内置
vim/nano这类命令行编辑器,所以没法在 CMD 黑窗口里直接打字编辑文件。
最直接的原生方案:CMD 调用记事本(不用装任何东西)
wsl
wsl windows subsystem for linux
Windows Linux子系统,它是微软推出的在 Windows 系统中直接运行 Linux 环境的技术,无需单独安装虚拟机,轻量且能无缝衔接 Windows 和 Linux 的文件系统、命令行工具,是计科学习、开发中在 Windows 上使用 Linux 环境的常用方式。
官方文档该怎么读?

可以下载Pdf,阅读体验更好一点,不是特别卡
基本wsl命令
官方文档中给出的命令

一些注意事项
help命令

注意一下文档怎么读
- 方括号
[]只是帮助文档里的语法提示,实际输入命令时不需要加 - 选项中的--是要加上去的
git
一些资源==
黑马程序员Git全套教程,完整的git项目管理工具教程,一套精通git_哔哩哔哩_bilibili
git简介==============
Git 是一个免费开源的分布式版本控制系统,旨在以速度和效率处理从小型到非常大的项目。--来自官方文档
核心功能--by豆包
变更记录与日志:记录每一次修改的作者、时间、修改内容、备注,可随时查询文件的修改轨迹,定位问题根源。
版本回溯 / 回滚:文件改坏、功能开发失败时,可一键回到任意历史版本,恢复到正常状态,无任何数据丢失。
分支管理:可创建独立的「分支」(比如主分支 main/master、开发分支 dev、bug 修复分支 bugfix),不同分支独立开发,互不影响;功能开发完成后,再将分支的修改「合并」到主分支,避免开发中的不稳定代码影响正式版本。
冲突解决:多人同时修改同一文件的同一处内容时,工具会自动标记「冲突点」,支持手动 / 半自动合并修改,彻底避免文件互相覆盖。
多人协作同步:团队成员可将本地修改「推送到」公共仓库,也可从公共仓库「拉取」他人的修改,实现跨设备、跨人的版本同步。
标签打版:对重要的正式版本(比如 v1.0、v2.1 正式发布版)打「标签」,永久标记该版本的文件状态,方便后续快速拉取正式版代码。
=带UI界面的git=====
Git 有很多图形界面工具 ( GUI ),比如 SourceTree、Github Desktop、TortoiseGit 等。
=============git bash=
Git Bash 是专门为 Windows 系统设计的、集成了 Git 命令的模拟 Unix 终端工具 —— 核心是让 Windows 用户能像在 Linux/Mac 系统的终端里一样,顺畅使用 Git 命令和 Unix 风格的终端命令,解决了 Windows 自带的 CMD/PowerShell 对 Git 原生命令支持不友好的问题。
Git Bash 并不是独立的软件,而是 Git for Windows(Windows 版 Git 安装包)自带的组件:
- 基于MinGW(最小化的GNU for windows)构建:本质是模拟Unix/bash环境的命令行窗口
- 内置完整的Git核心命令(git clone、git commit、git push等),同时兼容Unix终端命令(ls、cd、rm、mkdir等Unix风格的命令,和Windows自带的cmd/powershell的命令有所差异:如ls在cmd中的命令是dir)
- 纯命令行(这个就是操作模式了):区别去git gui、sourec tree 等图形化工具,Git Bash 是纯文本命令行方式,也是开发中最常用、最灵活的 Git 操作方式(图形化工具本质也是封装了这些命令)。
git bash 和git gui对比===


图形化工具本质也是封装了这些命令
那么什么是版本控制呢
版本控制是记录文件(代码、文档、配置等)的修改历史、追踪每一次变更细节、管理文件不同版本,并支持单人 / 多人协作编辑的技术和工具体系,核心是给文件的每一次修改做「可追溯的快照 + 标记」,本质解决文件修改回滚、多人协作冲突、版本混乱丢失三大核心问题,是软件开发、项目管理的基础必备技能。--by豆包
关键词:快照、回溯不同版本、备份、代码还原、协同开发
版本控制的方式==
一般两种:集中式版本控制工具、分布式版本控制
集中式版本控制工具,如:SVN、CVS ------过时喽
--by豆包,感兴趣可以看看
搭建一台中央服务器存储所有文件的完整版本历史,所有人从服务器拉取文件、提交修改,版本管理由服务器统一管控
优点:管理简单、权限控制清晰;
缺点:服务器故障则所有人无法提交 / 拉取版本,存在「单点故障」,离线状态下无法本地提交修改。
分布式版本控制工具,如:Git
同样by豆包
无单一的中央服务器,每个人的电脑都是一个「完整的版本仓库」(包含所有历史记录、分支、修改日志),可离线本地提交修改,联网后再与团队成员 / 公共仓库同步变更
优点:抗故障(本地有完整仓库)、支持离线开发、分支管理高效、多人协作冲突解决更灵活,是目前互联网、软件开发行业的标准选择。
=git工作流程图==========by黑马

命令如下:
- clone(克隆):从远程仓库中克隆代码到本地仓库
- checkout(检出):从本地仓库中检出一个仓库分支然后进行修订
- add(添加):在提交前先将代码提交到暂存区
- commit(提交):提交到本地仓库。本地仓库中保存修改的各个历史版本
- fetch(抓取):从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
- pull(拉取):从远程库拉到本地库,自动进行合并 (merge),然后放到到工作区,相当于 fetch+merge
- push(推送):修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库
=Git安装与常用命令===
因为基本在git bash(既可以用git中的命令又可以用linux中的命令),所以先学几个Linux命令
基本linux命令
- ls/ll 查看当前目录
- cat 查看文件内容
- touch 创建文件
- vi vi编辑器
cmd 不可用touch

ll和ls

ls -l 里的 total 显示的是所有文件占用的磁盘块大小总和(以 KB 为单位)。
-rw-r--r--文献类型与权限
1硬链接数量
as825文件所有者
197609文件所属组
0文件大小,单位是字节
Feb 1 13:23最后修改时间
基本配置=====
设置用户信息
git config --global user.nam "yezang"
git config --global user.email"3202813852@qq.com" # 不存在的邮箱也可以
查看用户信息
git config --global user.name
git config --global user.email
失误小案例:user.name和email没设置成功

原因:,user.name 和后面的 "yezang" 之间没有空格,导致这条命令没有真正生效,所以 Git 仍然保留着旧的用户名 fangdawei33。


为常用指令配置别名(可选)======
- 创建.bashrc文件
touch .bashrc
- 输入别名
alias 别名=‘原名’
- gitbash执行source ~/.,bashrc
别名中不能有空格
解决git bash乱码问题===========

=工作目录,除了.git之外的文件=
==========这个图很重要

小实战:
在gitstudy文件夹创建1.txt文件,并提交到仓库


git status查看文件状态

git add . 通配符.将所有文件添加到暂存区



==vi 文件名.拓展名
vim编辑器
被卡住了
按esc直到底部文字消失,进入普通模式。输入: wq 保存文件并退出
:q不保存直接退出,最后按enter键
i插入模式
我的第一个用vim编辑并在终端编译运行的c程序
-o 省略拓展名默认.exe文件
加上 ./ 前缀,告诉 bash 这是当前目录里的文件
=查看目录日志git log===
命令形式: git log [option]
- options
- --all 显示所有分支
- --pretty=oneline 将提交信息显示为一行
- --abbrev-commit 使得输出的 commitId 更简短
- --graph 以图的形式显示
git log --pretty==oneline --all --graph --abbrev --commit
# 太长了咋办?->取别名
在.bashrc输入下面内容
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'

这样就很棒
版本回退
git reset --hard commitID
- commitID就是那一串字符

git reflog 查看已经删除的记录(或者回退到老版本)

这里面去找你的版本号吧
linux中的复制粘贴=
ctrl c是退出的意思
选中一下你要复制的字符串就复制了,按住滚轮就是粘贴
双引号的作用是保留空格=

==分支=
查看本地分支
git branch
创建分支
git branch 分支名
上下方向键可以把上面的命令复制到当前行,必须要把更改提交到暂存区才能commit
切换分支
git checkout 分支名
切换并创建新分支
git checkout -b 分支名
删除分支
git branch -d 分支名
git branch -D 分知名 强制删除
合并分支
git merge 分知名
原则
master 生产分支
develop开发分支
feature/xxxx分支
hotfix/xx分支

====解决冲突
=git远程仓库========
常用的:gitee、github、gitlab(企业中,自己部署)
添加远程仓库
git remote <远端名称><仓库路径>
查看远程仓库
git remote
推送到远程仓库
如果远程分支名和本地分支名称相同,则只写本地分支
git push origin master
本地和远程分支绑定关系
git push --set-upstream origin master:master
然后就可以简写git push了
===================================================
git clone 远程仓库地址名
抓取
git fetch [remote name] [branch name]
将仓库里的更新都抓取到本地,不会进行合并
拉取
git pull [remote name] [branch name]
将远程仓库的修改拉到本地并自动合并,相当于fetch+merge
ssh
SSH(Secure Shell,安全外壳协议)是一种免费开源的网络协议,核心作用是:在不安全的网络环境中,为「本地电脑 ↔ 远程服务器」之间建立一条加密的通信隧道,让数据传输和远程登录变得安全。
github
GitHub 中文社区 - 首页 | 深度解读·趋势洞察·价值精选 - GitHub 排行榜·精选专题·热门话题
GitHub 是一个用于版本控制和协作的代码托管平台。 它允许您和其他人随时随地协同处理项目。
fork复刻一个仓库到自己的账户上
clone克隆到自己的电脑上(本地上)
一般开源协作流程
-
把本地修改 push 到「自己的 fork 仓库」(无需审核,直接生效);
-
在 GitHub 上向「原项目仓库」提交 PR(Pull Request,合并请求);
-
原项目的管理者 / 维护者审核你的 PR(看代码是否合理、有无 Bug 等);
-
审核通过后,管理者会把你的 PR 合并到原仓库,你的修改才会进入原项目。
pull request (PR)合并请求
main(主仓库,)
braches分支
default 默认模式
点击<>就回到了原始状态
旁边的那一串字符序列其实可以在本地git 回到任意版本,这样相比于点击<>更快更方便
所以说自己不用在创建分支也行。当然,如果自己想并行多种尝试其实也可以分支。(其实也是可以不用分支)


浙公网安备 33010602011771号