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。

image-20260129182923857

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

image-20260129184451964

常见的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 中运行更复杂的脚本。 有关详细信息,请参阅 cscriptwscript。 可以使用脚本比使用用户界面更高效地执行作。 脚本接受命令行中提供的所有命令。

PowerShell 旨在扩展 Command shell 的功能,以运行称为 cmdlet 的 PowerShell 命令。 Cmdlet 类似于 Windows 命令,但提供了更可扩展的脚本语言。 可以在 PowerShell 中同时运行 Windows 命令和 PowerShell cmdlet,但 Command shell 只能运行 Windows 命令,而不能运行 PowerShell cmdlet。

官方文档

image-20260130215755596

缺点:不支持知道功能找命令---只能通过搜索引擎或者豆包解决

.\ 是当前目录

常用cml语法

  • 创建空文件

echo. > 文件名.txt (注意 echo. 之间有空格,> 是重定向符号)

image-20260130220312199
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

安装 WSL | Microsoft Learn

Windows Linux子系统,它是微软推出的在 Windows 系统中直接运行 Linux 环境的技术,无需单独安装虚拟机,轻量且能无缝衔接 Windows 和 Linux 的文件系统、命令行工具,是计科学习、开发中在 Windows 上使用 Linux 环境的常用方式。

官方文档该怎么读?

image-20260130213434934

可以下载Pdf,阅读体验更好一点,不是特别卡

pdf文档

基本wsl命令

官方文档中给出的命令

image-20260130213110011

一些注意事项

help命令

image-20260130212738181

注意一下文档怎么读

  1. 方括号 [] 只是帮助文档里的语法提示,实际输入命令时不需要加
  2. 选项中的--是要加上去的

git

一些资源==

Git官方文档

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)
image-20260201123729556
  • 纯命令行(这个就是操作模式了):区别去git gui、sourec tree 等图形化工具,Git Bash 是纯文本命令行方式,也是开发中最常用、最灵活的 Git 操作方式(图形化工具本质也是封装了这些命令)。

git bash 和git gui对比===

image-20260201124001974

image-20260201123939834

image-20260201124102161

图形化工具本质也是封装了这些命令

那么什么是版本控制

版本控制是记录文件(代码、文档、配置等)的修改历史、追踪每一次变更细节、管理文件不同版本,并支持单人 / 多人协作编辑的技术和工具体系,核心是给文件的每一次修改做「可追溯的快照 + 标记」,本质解决文件修改回滚、多人协作冲突、版本混乱丢失三大核心问题,是软件开发、项目管理的基础必备技能。--by豆包

关键词:快照、回溯不同版本、备份、代码还原、协同开发

版本控制的方式==

一般两种:集中式版本控制工具、分布式版本控制

集中式版本控制工具,如:SVN、CVS ------过时喽

--by豆包,感兴趣可以看看

搭建一台中央服务器存储所有文件的完整版本历史,所有人从服务器拉取文件、提交修改,版本管理由服务器统一管控

优点:管理简单、权限控制清晰;

缺点:服务器故障则所有人无法提交 / 拉取版本,存在「单点故障」,离线状态下无法本地提交修改。

分布式版本控制工具,如:Git

同样by豆包

无单一的中央服务器,每个人的电脑都是一个「完整的版本仓库」(包含所有历史记录、分支、修改日志),可离线本地提交修改,联网后再与团队成员 / 公共仓库同步变更

优点:抗故障(本地有完整仓库)、支持离线开发、分支管理高效、多人协作冲突解决更灵活,是目前互联网、软件开发行业的标准选择。

=git工作流程图==========by黑马

image-20260201122711552

命令如下:

  1. clone(克隆):从远程仓库中克隆代码到本地仓库
  2. checkout(检出):从本地仓库中检出一个仓库分支然后进行修订
  3. add(添加):在提交前先将代码提交到暂存区
  4. commit(提交):提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. fetch(抓取):从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
  6. pull(拉取):从远程库拉到本地库,自动进行合并 (merge),然后放到到工作区,相当于 fetch+merge
  7. push(推送):修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

=Git安装与常用命令===

因为基本在git bash(既可以用git中的命令又可以用linux中的命令),所以先学几个Linux命令

基本linux命令

  • ls/ll 查看当前目录
  • cat 查看文件内容
  • touch 创建文件
  • vi vi编辑器

cmd 不可用touch

image-20260201124456155

ll和ls

image-20260201132447239

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没设置成功

image-20260201131211201

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

image-20260201131325911

image-20260201131612713

为常用指令配置别名(可选)======

  1. 创建.bashrc文件

touch .bashrc

  1. 输入别名

alias 别名=‘原名’

  1. gitbash执行source ~/.,bashrc

别名中不能有空格

解决git bash乱码问题===========

image-20260201131904479

=工作目录,除了.git之外的文件=

==========这个图很重要

image-20260201133213789

小实战:

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

image-20260201133849323

image-20260201133917795

git status查看文件状态

image-20260201134103379

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

image-20260201134244509

image-20260201134306644

image-20260201134402473

==vi 文件名.拓展名

vim编辑器

image-20260201134517704

被卡住了

按esc直到底部文字消失,进入普通模式。输入: wq 保存文件并退出

:q不保存直接退出,最后按enter键

i插入模式

image-20260202193821419我的第一个用vim编辑并在终端编译运行的c程序

image-20260201155330289

-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'

image-20260201141439474

这样就很棒

版本回退

git reset --hard commitID

  • commitID就是那一串字符

image-20260201142029499

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

image-20260201142128746

这里面去找你的版本号吧

linux中的复制粘贴=

ctrl c是退出的意思

选中一下你要复制的字符串就复制了,按住滚轮就是粘贴

双引号的作用是保留空格=

image-20260201145040892

==分支=

查看本地分支

git branch

创建分支

git branch 分支名

上下方向键可以把上面的命令复制到当前行,必须要把更改提交到暂存区才能commit

切换分支

git checkout 分支名

切换并创建新分支

git checkout -b 分支名

删除分支

git branch -d 分支名

git branch -D 分知名 强制删除

合并分支

git merge 分知名

原则

master 生产分支

develop开发分支

feature/xxxx分支

hotfix/xx分支

image-20260202222042394

====解决冲突

=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中文网

GitHub 是一个用于版本控制和协作的代码托管平台。 它允许您和其他人随时随地协同处理项目。

fork复刻一个仓库到自己的账户上

clone克隆到自己的电脑上(本地上)

一般开源协作流程

  1. 把本地修改 push 到「自己的 fork 仓库」(无需审核,直接生效);

  2. 在 GitHub 上向「原项目仓库」提交 PR(Pull Request,合并请求);

  3. 原项目的管理者 / 维护者审核你的 PR(看代码是否合理、有无 Bug 等);

  4. 审核通过后,管理者会把你的 PR 合并到原仓库,你的修改才会进入原项目。

pull request (PR)合并请求

main(主仓库,)

braches分支

default 默认模式

点击<>就回到了原始状态

旁边的那一串字符序列其实可以在本地git 回到任意版本,这样相比于点击<>更快更方便

所以说自己不用在创建分支也行。当然,如果自己想并行多种尝试其实也可以分支。(其实也是可以不用分支)

image-20260130200433499

posted @ 2026-02-04 12:59  叶臧  阅读(0)  评论(0)    收藏  举报