基本操作
- Git的记录
- git记录所有版本的存储
- 三棵树:工作区(你所用到的)、暂存区、git仓库(存放所有版本的数据)
- Git的工作流程
- 工作目录的添加修改
- 需要进行版本管理的文件放入暂存区域
- 暂存区域文件提交到git仓库
- git管理文件的三个状态
- 已修改(modified)
- 已暂存(staged)
- 已提交(committed)
- Git操作
- 将工作目录文件刚入git仓库:
- 新建文件夹,命令提示符切换到该目录下
git init初始化仓库git add 文件名git commit -m "注释"
- 查看状态
git status
- 回撤上次操作(谨慎操作)
git checkout -- 文件名(可选)git reset HEAD 文件名(可选)
- 查看历史状态
git log

- 将工作目录文件刚入git仓库:
- reset 命令
-
reset命令的选项
git reset HEAD~
移动HEAD的指向,将其指向上一个快照(版本),修改的第三棵树
将HEAD移动后指向的快照回滚到暂存区域,修改的第二棵树git reset --soft HEAD~
移动HEAD的指向,将其指向上一个快照(相当于撤销上一次提交)
git reset --hard HEAD~(谨慎操作)
移动HEAD的指向,将其指向上一个快照(状态),修改第一棵树
将HEAD移动后指向的快照回滚到暂存区域,修改第二棵树
将暂存区域文件还原到工作目录,修改第一棵树 -
reset命令总结
--soft移动HEAD的指向,改变第三棵树仓库里面的内容- 默认,是将快照回滚到暂存区域
- 将暂存区域内容还原到工作目录(谨慎操作)
-
回滚到指定快照
使用快照的特定哈希,即
git log中的每个操作对应的字符串
-
图片解释:工作区完成 README.md(v1) add到暂存区,commit到仓库区,即上左,又完成LICENSE(v1)add和commit,即上中,最后修改完成LICENSE(v2)add和commit,即上右,最新HEAD指向最右;图下显示各时段三棵树状态。

图片解释:执行git reset HEAD~,HEAD就会指向前一个快照(版本),即上中,该指令会将暂存区域内容返回为HEAD移动后指向的快照内容(即上一个版本内容),这是若查看git status则会显示原工作区修改并提交的LICENSE(v2)文件未被git追踪到(之前的add操作以往,文件在命令符中是红色的)

图片解释:这是接着执行git reset --hard HEAD~操作,根据指令HEAD指向上左,且将HEAD移动后指向的快照回滚到暂存区域,且将暂存区域文件还原到工作目录,这里就会出现工作区内容被覆盖,即LICENSE(v2)文件消失。

git diff命令- 会出现
diff --git a/filename b/filename,即对比工作区和暂存区文件差异 ---三个减号对应的是暂存区文件(未修改旧文件)+++三个加号对应工作区文件(修改后文件)- 输入
h可获取帮助 - 比较两个历史快照
git diff id1 id2一般写哈希序列的前5、6个值就行了
- 比较当前工作区与仓库快照
git diff id与仓库中某个版本对比git diff HEAD与仓库中最新的版本对比
- 比较暂存区与仓库快照
git diff --cached暂存区与仓库中最新版本对比git diff --cached id暂存区与仓库中指定版本对比
图片解释:git diff的相关图示

- 会出现
修改最后一次提交
- 状况一、版本
commit到仓库后,发现忘记还有文件没有add - 状况二、版本
commit后发现版本说明写的不够全面
处理方法:使用带
--amend选项的commit提交命令,git 会“更正”最近一次提交(git commit --amend,)
删除文件
git checkout -- filename恢复误删文件git rn filename删除误传文件(错误add,commit到仓库的文件),该命令删除的只是工作区和暂存区的文件,也就是取消跟踪,在下次提交时不纳入版本管理,在仓库日志中还收有信息的,加上git reset --soft HEAD~命令后可完全消除记录。- 当对暂存区文件,工作区修改后,想要进行删除,会有提示无法删除,使用
git rn -f filename会同时删除两个文件。 - 只想删除暂存区文件:
git rn --cached filename可完成
重命名文件
git nv oldname newname操作
分支
-
git branch 分支名创建分支 -
git checkout 分支名切换分支 -
git checkout -b feature创建并且换到分支feature -
git log --decorate --oneline --graph --all图像化显示所有分支 -
git merge 分支名合并分支 -
git branch -d 分支名删除分支


-
checkout指令的另一些操作- 匿名分支:
git checkout HEAD~当checkout后面接的不是一个分支名时,git会自动常见一个匿名分支,这个分支操作都一样,但是要合并到主分支后就会自动消失,即你可以当作是一个无成本的实验。 - 从历史快照(或者暂存区)中拷贝文件到工作目录:
git checkout HEAD~ 文件名命令会将上一个快照中的该文件复制到工作目录和暂存区;git checkout 文件名将会从暂存区恢复指定文件到工作目录。
使用
git checkout -- 文件名这样的写法是为了防止恢复文件出现和文件名重名的分支名让git无法分辨- 切换分支:上文所说,切换仓库中指针指向,并且将对应的内容覆盖暂存区和工作区。
- 匿名分支:
-
reset和checout命令的区分- 对于恢复文件,两者都可以回复指定快照的指定文件,并且都不会改变HEAD指针的指向;区别是
reset命令只能将文件恢复到暂存区域,checkout命令会同时覆盖暂存区和工作区,此时的reset命令使用--soft/--hard指令对文件无效,总的来,reset恢复文件要更安全点。 - 对于回复快照,
reset命令是用来回到过去的,根据选项的不同,reset命令将移动HEAD指针(–soft)-> 覆盖暂存区(默认)-> 覆盖工作区(–hard);checkout命令在分支上也会有类似的操作。区别在于checkout要更安全些,checkout在切换分支前都会检查当前工作状态,而reset --hard会直接覆盖;另一个,reset命令移动HEAD指针时是在其所在分支上,而checkout会移动HEAD自身到另一个分支上。
- 对于恢复文件,两者都可以回复指定快照的指定文件,并且都不会改变HEAD指针的指向;区别是
后记:记录来自网易云课堂上的一篇git教程,附上网址有需要可移步
本文深入解析Git的基本操作流程,包括工作区、暂存区及仓库的概念,详解如何通过Git进行文件版本管理,涵盖添加、修改、提交及回滚等核心操作。同时,介绍了分支管理及合并策略,为用户提供了一套完整的Git使用指南。
1342

被折叠的 条评论
为什么被折叠?



