【Git&GitHub 本地库操作 01】
一、Git结构
工作区:写代码的区域,新建的文件等
暂存区:暂时存放代码的区域,准备提交但是还提交,即保存文件的区域
本地库:提交代码的区域
工作区写了代码通过git add命令提交到暂存区,暂存区通过git commit命令提交到本地库
二、Git和代码托管中心
托管中心其实就是远程库
1、局域网环境下的代码托管中心:
- GitLab服务器
2、外网环境下的代码托管中心:
- GitHub
- 码云
三、本地库和远程库的关系
1、团队内部协作
2、跨团队协作
三、Git命令行操作
本地库操作
前提:创建一个文件夹,终端进入此文件夹内,进行后续操作。
1、本地库初始化:
- 命令:git init
MacBook-Pro-2:Git wufq$ git init
Initialized empty Git repository in /Users/wufq/Desktop/Git/.git/
此命令的作用其实就是创建一个.git文件(此文件是隐藏文件)
mac系统参考文件:
https://blog.csdn.net/lu1024188315/article/details/74080021
https://www.cnblogs.com/hd92/p/13554229.html
- .git文件创建以后的目录
2、配置个人信息(姓名和邮箱,目的是告诉git上的其他用户知道你是谁)
|-- 项目级别和仓库级别:仅在当前本地库范围内有效
--> 命令:
配置姓名
$ git config user.name zhaoliyin
配置邮箱
$ git config user.email 183xxx5141@qq.com
备注:这里设置的用户名和登录远程库(代码托管中心)的账号密码没有任何关系
--> 配置完以后,信息保存位置: ./git/config
|-- 系统用户级别:登录当前操作系统的用户范围
-->命令:
$ git config --global user.name zhaoliyin
$ git config --global user.email 183xxx5141@qq.com
-->配置完以后,同样会保存到 ~/.gitconfig文件内
|-- 级别优先级
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
如果只有系统用户级别的签名,就以系统用户级别的签名为准
二者都没有不允许
2、基本操作
|-- 状态查看:git status (查看工作区,暂存区状态)
|-- 添加:git add [file name](将工作区的“新建/修改”添加到暂存区)
|-- 提交:git commit -m "commit message" [file name](将暂存区的内容提交到本地库)
-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
同样可以添加多个文件:
--> $ git add file1.txt
--> $ git add file2.txt file3.txt
--> $ git commit -m "add 3 files."
|-- 查看历史记录:git log
上图信息:commit是提交,aeb9...这一长串其实是哈希值,HEAD是一个指针,指向当前版本:HEAD -> master 指的是指向master的版本
多屏显示控制方式:空格向下翻页,b向上翻页,q退出
git log --pretty=oneline
git log --oneline
git reflog
HEAAD@{移动到当前版本需要几步}
|--reset命令的三个参数对比
--> --soft参数:仅仅在本地库移动
--> --mixed参数:在本地库移动HEAD指针;重置暂存区
--> --hard参数:在本地库移动HEAD指针;重置暂存区和工作区
|-- 前进后退
基于索引的操作:git reset --hard 27b6184 (27b6184指的是索引)
使用^符号:只能后退 git reset --hard HEAD^^^ (一个^代表后退一步,n个就代表后退n步)
使用~符号,只能后退 git reset --hard HEAD~n (表示后退n步)
举例:验证版本之间的回退
1、先在工作区创建一个文件vs.log,此文件内容为两行,然后提交到暂存区和本地库
2、通过 git reflog查看历史记录,可以看到HEAD指向了“第一次提交vslog”这个版本
3、vslog.txt文件新增加两行,然后提交到暂存区,在提交到本地库
4、通过 git reflog查看历史记录,可以看到HEAD指向了“增加两行vslog”这个版本
5、回退到上一版本,也就是“第一次提交vslog”文件的那一版,命令:git reset --hard HEAD^
6、用git reflog 查看历史版本,这时候HEAD又指向了“move to HEAD^”,也就是指向了删除的哪一条记录
7、用git reset --hard HEAD d3f50eb 恢复到新增加的那一版
总结:这个例子就是验证文件采用reset来进行不同版本之间的退回(应用场景如:新提交的这一版本的代码有问题,可以回退到上一版本,新提交的代码不小心被删除了,又可以被恢复)
|-- 删除文件并找回
前提:删除前,文件存在的状态提交到了本地库
操作:git reset --hard [指针位置]
--> 删除操作已经提交到本地库:指针位置指向历史记录
--> 删除操作尚未提交到本地库:指针位置使用HEAD
|-- 比较文件差异
--> git diff [文件名] 将本地区文件和暂存区文件进行比较
--> git diff [本地库中历史版本] [文件名] 将工作区的文件和本地库的文件进行比较
(git diff HEAD^^ vslog.txt 表示:HEAD^^指的是上上个版本和工作区进行的一个比较)
--> 不带文件名比较多个文件
(git diff HEAD^^ HEAD^^指的是上上个版本和工作区进行的一个比较 多个文件的一个比较)
3、分支管理
|-- 分支的概念:在版本控制过程中,使用多条线同时推进对个任务
|-- 分支操作:
创建分支:git branch [分支名]
查看分支:git branch -v
图上所知:当前分支在master
切换分支:git checkout [分支名]
已经切换成功,当前分支在hot_fix上
合并分支:
--> 第一步:切换到接受修改的分支(被合并,增加新内容)上(比如:修改了test_fox分支上的test.txt文件,需要合并到master分支上)
合并代码:git checkout [被合并的分支]
--> 第二步:执行 merge命令
git merge [有新内容的分支名] (比如:git merge master)
test_fox分支和master分支,都修改test.txt文件,并且都是在第四行修改的内容,修改以后master分支合并到test_fox分支,然后就弹出来了冲突的提示信息
解决冲突:
--> 冲突的表现:
-->冲突的解决:
步骤:1)编辑文件,删除特殊符号
2)把文件修改到满意程度,保存退出
3)git add [文件名]
4)git commit -m "日志信息"
注意:此时的commit 一定不能带具体文件名,否则会报错
解决冲突的另外一种方法:
前提:如果本地冲突的数据不是很重要的数据,可以直接把git上面的代码拉取进行覆盖
如果你想要强制拉取远程仓库的代码并覆盖本地的修改,可以采用以下几种方法: 先用git status看下具体冲突文件 1. **使用 `git fetch` 和 `git reset` 命令**: - 首先,使用 `git fetch` 命令获取远程仓库的最新代码,但不进行合并: git fetch origin - 然后,使用 `git reset` 命令将当前分支的HEAD指向远程分支的最新commit,这里以`master`分支为例: git reset --hard origin/master - 最后,使用 `git pull` 命令进行合并: git pull 这种方法会将本地的代码完全覆盖为远程仓库的最新代码。 2. **使用 `git pull` 命令的 `--force` 选项**: - 你可以直接使用 `git pull` 命令的 `--force` 或 `-f` 选项来强制覆盖本地代码: git pull --force origin master 请注意,使用 `--force` 选项可能会导致本地代码的丢失,并可能覆盖其他人的修改。因此,在使用此选项之前,请确保你了解相关风险,并确保在团队协作中得到其他成员的许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫