Git的初步学习
一.git的认识
概念:代码版本控制系统,帮助团队维护代码
git仓库:记录文件状态内容和历史记录的地方(.git文件夹)
创建git仓库:
1.把本地文件夹转换成Git仓库:git init
2.从其他服务器上克隆git仓库
二.git的区域
工作区:实际开发时操作的文件夹
暂存区:保存之前的准备区域(暂存改进过的文件)
版本库:提交并保存暂存区中的内容,产生一个版本快照
暂存指定文件:git add 文件名
暂存所有改动的文件:git add .
提交并保存,产生版本快照:git commit -m ‘‘注释说明’’
三.git文件状态
分为两种:已跟踪和未跟踪(新添加,未修改,已修改)
未跟踪U:新文件:从未被Git管理过
已跟踪:Git已经知道和管理的文件
新添加A:第一次被Git暂存,之前把版本记录无此文件
未修改 ‘’ 三个区域统一(提交保存后)
已修改M:工作区内容变化(修改了内容产生)
git文件的使用:修改文件,暂存,提交保存记录,如此反复
** 查看暂存区:git status -s**
四.git暂存区使用
暂存区:暂时存储,可以临时恢复代码内容,与版本库解耦
暂存区->覆盖->工作区 :git restore 目标文件(完全确认覆盖时使用)
从暂存区移除文件:git rm --cached 目标文件
查看历史提交暂存记录:git log --oneline
五.Git回退版本
把版本库某个版本对应的内容快照,恢复到工作区/暂存区
回退:**git reset --soft 版本号 **
git reset --hard 版本号
git reset --mixed 版本号
三种常用模式及区别
选项 | 作用说明 | 适用场景 |
---|---|---|
--soft | 仅移动 HEAD 指针到目标版本,暂存区和工作区不变 | 想“撤销”最近几次提交,保留修改内容以便重新提交(比如合并多个提交) |
--mixed | 移动 HEAD 指针,重置暂存区(与目标版本一致),工作区不变(默认) | 想撤销 git add 的暂存操作,或回退版本但保留工作区修改 |
--hard | 移动 HEAD 指针,重置暂存区和工作区(与目标版本完全一致) | 彻底丢弃目标版本后的所有修改(包括工作区),回到历史某个干净版本 |
典型使用场景
1. 撤销最后一次提交(保留修改)
如果刚 git commit
后发现提交有误,想撤销提交但保留修改内容:
# 回退到上一次提交(HEAD~1 表示上一个版本,~2 表示上两个,以此类推)
git reset --soft HEAD~1
- 效果:最后一次提交被“删除”,但修改内容仍在暂存区(可直接
git commit
重新提交)。
2. 撤销暂存区的修改(保留工作区)
如果执行 git add
后想取消暂存(比如误加了文件):
# 重置暂存区(默认 --mixed,可省略)
git reset HEAD <文件名># 示例:取消暂存 dingdan.html
git reset HEAD git-demo/ddd/dingdan.html
- 效果:文件从暂存区回到工作区,修改被保留,可重新编辑后再
git add
。
3. 彻底回退到历史版本(丢弃所有后续修改)
如果想彻底删除某个版本后的所有提交和修改(谨慎使用!会丢失数据):
# 1. 先查看历史提交,找到目标版本的 ID(如 a1b2c3d)
git log# 2. 回退到该版本(--hard 会清空工作区和暂存区的修改)
git reset --hard a1b2c3d
- 警告:
--hard
会永久删除目标版本后的所有修改,无法恢复,确保不需要这些修改再执行。
六.删除文件
在 Git 中删除文件需要同时处理本地文件和Git 版本跟踪
- 确认文件是否被 Git 跟踪(用
git status
查看) - 被跟踪:用
git rm
(彻底删除)或git rm --cached
(保留本地) - 未跟踪:直接用系统
del
/rm
命令删除 - 误删恢复:根据是否提交,用
git restore
或git reset
操作
七.忽略文件
.gitignore 文件可以让git彻底忽略跟踪指定文件
目的:让git仓库更小更快,避免重复无意义的文件管理
创建:项目根目录新建.gitignore文件
2.填入相应配置来忽略指定文件
注:如果文件已经被暂存区跟踪过,可以从暂存区移除即可
八.分支
开发新需求/修复Bug,保证主线代码随时可用,多人协同开发提高效率
创建分支:git branch 分支名
切换分支:git checkout 分支名
例:把bug合并回到main分支并删除bug分支
切回到要合入的分支上:git checkout main
合并其它分支过来:git merge bug
删除合并后的分支指针:git branch -d bug
合并提交:发生于原分支产生了新的提交记录后,再合并回去时发生,自动使用多个快照记录合并后产生一次新的提交
合并冲突:在合并两个分支时,发现同一个文件的同一部分被修改得不一样,无法自动判断该保留哪一个,于是 “卡住” 并提示你手动解决的情况
九.gitee的使用
Git 全局设置部分
git config --global user.name "Young"
作用:设置 Git 的全局用户名,这里将用户名设为 “Young” 。--global
表示全局配置,即对当前用户的所有 Git 仓库都生效,提交代码时,该用户名会作为提交者信息记录下来。git config --global user.email "2137353033@qq.com"
作用:设置 Git 的全局用户邮箱,提交代码时,该邮箱会和用户名一起作为提交者身份信息,用于标识是谁提交了代码,同样受--global
影响,对当前用户所有仓库有效。
创建 git 仓库部分
mkdir gitstudy
作用:在当前命令行所在目录下,创建一个名为gitstudy
的新目录(文件夹 ),作为后续存放 Git 仓库相关文件的地方。cd gitstudy
作用:切换当前工作目录到刚创建的gitstudy
目录,后续 Git 操作就会在这个目录对应的仓库里进行。git init
作用:初始化一个空的 Git 仓库,执行后,当前目录会生成一个隐藏的.git
文件夹,用于存储 Git 仓库的版本控制信息(如提交记录、分支信息等 ),从此该目录就可以用 Git 进行代码版本管理了。touch README.md
作用:在gitstudy
目录下,创建一个名为README.md
的空文件,通常用于存放项目的说明文档(很多开源项目用它介绍项目功能、使用方法等 )。git add README.md
作用:将README.md
文件添加到 Git 的暂存区。暂存区是 Git 用于临时存放待提交文件改动的地方,只有放到暂存区的文件,后续才能被提交到本地仓库。git commit -m "first commit"
作用:把暂存区的文件改动(这里就是README.md
的添加 )提交到本地 Git 仓库,生成一个新的提交记录。-m
后面跟的是提交说明,用于描述这次提交做了什么,方便后续查看提交历史时理解改动意图,这里说明是 “first commit”(第一次提交 )。git remote add origin https://gitee.com/Youngmmm/gitstudy.git
作用:为本地 Git 仓库添加一个远程仓库地址,命名为origin
,后续可以通过origin
这个名称来关联和操作远程仓库(这里远程仓库是 Gitee 上的gitstudy
仓库 )。git push -u origin "master"
作用:将本地仓库master
分支(旧版 Git 默认主分支名,新版可能是main
)的提交记录推送到远程仓库(即前面添加的origin
对应的 Gitee 仓库 )。-u
选项会建立本地分支和远程分支的关联,后续再推送或拉取时,就可以直接用git push
或git pull
,不用每次指定远程和分支。
已有仓库部分
cd existing_git_repo
作用:切换到已有的 Git 仓库所在的目录(existing_git_repo
是示例目录名,实际替换成真实仓库目录 ),准备进行远程仓库关联和推送操作。git remote add origin https://gitee.com/Youngmmm/gitstudy.git
作用:和前面创建仓库时的该命令作用一样,给已有的本地 Git 仓库添加远程仓库地址origin
,关联到 Gitee 上的gitstudy
仓库。git push -u origin "master"
作用:把已有本地仓库master
分支的提交推送到远程仓库,并建立本地分支与远程分支的关联,后续方便推送和拉取。
这些命令整体是从配置 Git 全局信息,到本地创建仓库、做首次提交,再关联远程仓库并推送代码的完整流程,常用在将本地项目托管到远程代码平台(如 Gitee、GitHub 等 )的场景中。
Git远程仓库克隆
克隆:拷贝一个Git仓库到本地进行使用
命令:git clone 远程仓库地址
效果:在运行命令所在文件夹生成work项目文件夹(包含版本库,并映射到暂存区和工作区)
注意:Git本地仓库已经建立好和远程仓库的链接,仓库公开随意克隆,推送需要身为团队成员