git学习笔记
学习 https://www.git-scm.com/book/zh/v2/ 记录
https://www.git-scm.com/book/zh/v2/ #学习站点
git三种状态 :
已提交 committed 数据已经保存到本地数据库中
已修改 modified 修改了文件,但是还没保存到数据库
已暂存 staged 对一个已修改的文件当前版本做了标记,使之包含在下次提交的快照中
工作目录,暂存区域,git仓库
工作目录 对于项目的某个版本提取的内容,放在磁盘供修改
暂存区域 是一个文件,保存了下次要提交的文件列表信息,一般在git目录中。
git仓库 保存项目的元数据和对象数据库
#安装
sudo yum install -y git;
#设置用户名与邮箱 (设置之后无需再设置 如果需要指定文件夹下单独账号 去掉global设置)
git config --global user.name "youname"
git config --global user.email "youemail@email.com"
#设置编辑器 默认vim
git config --global core.editor emacs
#检查配置信息
git config --list
#检查某一项配置
git cofig [配置名 如 user.name]
#获取帮助
git help 命令
git 命令 --help
man git-命令
如 git help config,git config --help,man git-config
#如果目录不存在 创建他 并初始化git仓库 [在当前目录下创建一个.git文件夹 包含仓库所需文件]
git init
#如果目录已存在 则进行跟踪
git add *.c
git add LICENSE
git commit -m '初始项目版本'
#克隆仓库
#克隆现有仓库
git clone url
例如: git clone https://github.com/libgit2/libgit2 会在当前目录下创建一个libgit2目录 并且包含远程仓库的所有内容
#克隆现有仓库 并自定义命名本地文件夹名称
git clone url dirname
例如: git clone https://github.com/libgit2/libgit2 mylibgit
#备注 git支持多种协议 https:// git:// user@server:path/to/repo.git
#查看仓库状态[查看是否出现新更改 如果为空 则没有新的修改]
#查看详细状态
git status
#查看简要信息
git status -s , git status --short
#
?? 标记 : 新添加 未跟踪
MM 左边的M 被修改 并放入暂存区 右边的M 被修改 没有放入暂存区
M 被修改 但是未放入暂存区
M 被修改 并放入暂存区
A 被修改了 并把修改放入了暂存区
#查看尚未暂存 详细信息
git diff
#查看已暂存添加到下次提交的内容里
git diff --cached
#跟踪文件
git add 文件名
#忽略指定文件 创建 .gitignore [不想提交到git 并且不让git提示到]
cat .gitignore
*.[oa] #忽略以.o 或.a结尾的文件
*~ #忽略所有以~符结尾的文件
#.gitignore规范
所有空行或者以#开头的行都会被Git忽略
可以使用glob模式匹配
匹配模式可以(/)开头防止递归
匹配模式可以(/)结尾指定目录
要忽略指定模式以外的文件或目录,可以在模式前面加上惊叹号(!)取反
#提交 [git commit 提交的是已存放在暂存区的内容[git add过后的]]
#直接命令行填写注释
git commit -m '提交备注'
#提交之前先用git status 查看哪些修改还没有git add过 [会进入vim提示编写本次提交的备注]
git commit
#把git diff信息填充到编辑器内 再进行编写备注
git commit -v
#跳过暂存区域 直接提交所有跟踪过的文件 [免去 git add 但是之前必须已经 git add过]
git commit -a
#移除文件
#删除暂存区[已跟踪文件] 并 删除本地文件 [如果是新建文件 提示已加入暂存区,可以添加 -f 强制删除 如果已提交过 可以直接删除]
git rm 文件名 #指定文件删除
git rm log/\*.log #glob模式
git rm \*~ #删除所有以~结尾的文件
#也可以先手动删除文件
rm 文件名 #先删除本地文件
git rm 文件名 #再删除缓存区文件
#只从版本库[暂存区]删除 本地保留 [防止误操作提交重要文件或无用文件]
git rm --cached 文件名 #指定文件删除
#修改文件名
git mv 文件名 新文件名 # 执行三次操作 : mv 文件名 新问假名; git rm 文件名 ; git add 新文件名;
#查看提交历史
git log
#参数
-p #显示每次提交内容的差异
-number #显示最近number次 整数 例:12345678
--stat #显示简略信息
--pretty = #指定不同默认格式展示提交历史[美化显示]
oneline #每个提交在第一行显示[显示自己提交的备注]
short #显示作者 名字 邮箱 及 sha1字符串
full #显示作者 提交者 名字邮箱及sha1字符串
fuller #显示作者 提交者 名字邮箱及sha1字符串 作者创建日期 提交者提交日期
format: #定制显示记录格式
%H #提交对象(commit)的完整哈希字串
%h #提交对象的简短哈希字串
%T #树对象(tree)的完整哈希字串
%t #树对象的简短哈希字串
%P #父对象(parent)的完整哈希字串
%p #父对象的简短哈希字串
%an #作者(author)的名字
%ae #作者的电子邮件地址
%ad #作者修订日期(可以用 --date= 选项定制格式)
%ar #作者修订日期,按多久以前的方式显示
%cn #提交者(committer)的名字
%ce #提交者的电子邮件地址
%cd #提交日期
%cr #提交日期,按多久以前的方式显示
%s #提交说明
#例:
git log -p -2
git log --stat
git log --pretty=oneline
git log --pretty=format:"%h %s"
git log --pretty=format:"%h %s" --graph # 网站说 --graph 很有效结合 但是只是在 简短sha1字符串前面加上了 * 号 代表省略吗?[发现啦 上面说是会给显示图形那样]
#git log 常用选项
-(n) #仅显示最近的 n 条提交
--since, --after #仅显示指定时间之后的提交。
--until, --before #仅显示指定时间之前的提交。
--author #仅显示指定作者相关的提交。
--committer #仅显示指定提交者相关的提交。
--grep #仅显示含指定关键字的提交
-S #仅显示添加或移除了某个关键字的提交
#例
git log --pretty="%h - %s" --author=gitster --since="2008-10-01" --before="2008-11-01" --no-merges -- t/
#撤销操作
#提交完毕 之后发现部分文件没有提交 或者备注写错了 进行重新提交
git commit --amend
#例 第二次提交 会覆盖第一次提交
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
#取消暂存的文件 如果一次暂存了两个文件[也可以是多个 这里只是举例] 但是这两个文件要分为两次提交
git reset HEAD 要撤销的文件名
#撤销对文件的修改
git checkout -- 文件名
#备注 : 所有已经提交的 都是可以恢复的 不管是删除 覆盖 撤销 但是未提交的就是真的没有了!!
#远程仓库使用
#查看远程仓库
git remote
#查看远程仓库并显示url [如果有多人合作的 则会显示全部人的信息 有多个]
git remote -v
#添加远程仓库
git remote add 简称[自定义命名] git远程仓库地址
#例 [拉取之前需要现在目录初始化 git init 然后就可以添加远程仓库了]
git remote add pb https://github.com/paulboone/ticgit
#从远程仓库拉取更新
git fetch 远程名 #只是拉取 并不会自动合并 也不会有数据 只是拥有那个远程仓库中所有分支的引用,可以随时合并或查看。
#实验发现是从远程仓库拉取 但是不会合并提交 需要自己手动操作:手动跟踪 手动提交
#如果实验出错 删除测试目录 重新建立一个 测试 多测试几遍
#例
git fetch pb
#如果你有一个分支设置为跟踪一个远程分支 自动的抓取然后合并远程分支到当前分支[更方便]
git pull #从最初的克隆服务器上抓取数据并尝试合并
#使用git clone 会自动生成默认仓库名 'origin '
#推送到远程仓库
git push [远程名] [分支名称]
#例
git push origin master #如果其他人在你之前提交过更新 那么你就要先把他们的合并到你的分支中 然后再进行提交
#当然 你还要有写权限
#查看远程仓库
git remote show [远程名] #显示远程url以及跟踪分支信息 你在哪个分支 以及 git pull会抓区并合并
#例
git remote show origin
#远程仓库 移除与重命名
#重命名
git remote rename 旧名字 新名字 #也会修改自己在远程服务器上的名字
#移除远程仓库 或者某一个贡献者不再贡献
git remote rm 远程名
#打标签
#显示所有标签
git tag
#指定参数显示
git tag -l 'v1.8.5*'
#标签分为 轻量标签 附注标签
#附注标签 储存在git数据库的完整对象 包含很多信息 [这里的 -m 提交只是提交至版本 与 commit提交不相关 ,如果要提交 则需要在版本后再提交一次(目前测试是这样的)]
git tag -a 版本 -m "备注"
#查看指定标签与对应的提交信息
git show 版本号
#轻量标签 不会改变分支,只是特定提交的引用 只显示提交信息
git tag 版本号
#后期打标签
git tag -a 版本号 版本的sha1字符串
#检出标签 可以切换至 指定版本 但是存在危险性[文档这样说的 会导致版本错乱 可怕 不要用 还是用commit吧]
git checkout -b [branchname] [tagname]
#例
git checkout -b version2 v2.0.0
#git 别名
git config --global aliso.别名 命令名
#例:
git config --global aliso.cit commit #把 commit 重命名为 cit
#如果需要使用
git cit # 等同于 git commit
#长命令别名
git config --global alias.last 'log -1 HEAD' #给很长的命令加上引号就可以了
#例 使用
git last 文件名 # 等同于 git log -1 HEAD 文件名
#git自定义外部命令 在外部命令前面加上 !
git config --global alias.别名 '!外部命令'
#例
git config --global alias.ls '!ls -l' # 执行git ls 就等同于执行外部命令 ls -l 注意 要在外部命令前面加上'!'
#2.8总结 https://www.git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%80%BB%E7%BB%93
#现在已经完成所有git基本操作 创建或克隆一个仓库 做更改 暂存并提交这些更改 浏览你的仓库从创建到现在的所有历史
地 址 :https://www.cnblogs.com/xiaqiuchu/articles/10043674.html
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义