论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
开源技术
›
开源技术
›
Git核心概念图例与最常用内容操纵(reset、diff、restore ...
Git核心概念图例与最常用内容操纵(reset、diff、restore、stash、reflog、c ...
欢乐狗
金牌会员
|
2024-11-8 16:13:41
|
显示全部楼层
|
阅读模式
楼主
主题
873
|
帖子
873
|
积分
2619
简介
本文将先容Git几个核心概念,和最常用的几个内容操纵命令:
reset
diff
restore、checkout
stash
reflog
revert
cherry-pick(merge、rebase)
前置概念
起首我们来看一下几个非常重要的前置概念
.git目录
git init
复制代码
我们实行上面命令就会天生一个.git目录
【工作区】add就到【暂存区】commit就到【本地仓库】
objects目录
objects目录中保存的是add到暂存区和commit到本地仓库的文件
refs目录
HEAD文件
HEAD是一个文本文件,你们内容是HEAD当前指向的分支:
ref: refs/heads/feature-view
reset
我们起首来看一下我们最常用的reset操纵。
reset是重置,他重置的是commit
git reset [–soft | --mixed | --hard] HEAD
–mixed:默认参数,撤销commit,全部commit和没有commit的代码放到工作区
–soft:撤销commit,全部commit和没有commit的代码放到暂存区
–hard:撤销commit,丢弃全部commit、工作区、暂存区代码
# head表示当前版本,head^等价于head~1表示回退所有内容到上一个版本
git reset head^
# 回退2个版本
git reset head~2
# 将tree.txt这个文件的版本到上一个版本
git reset head^ tree.txt
# 回退到指定commit,commit-id:4889036387
git reset 4889036387
复制代码
我们最最常用的reset的2个操纵:
感觉本身的commit有点题目,想重新commit,这个也可以用git commit --amend
本身push之前有提交,导致push失败,pull之前要reset,这里可以用–soft参数,如许如果没有辩论就不用再add了
reset多个版本的这种操纵不发起做,除非没有push到长途仓库,或者只有你一个人在提交接码。
如果修改了长途仓库的commit,通常push是不可的,必须利用git push -f。
git push -f是一个非常伤害的操纵,会导致push之前,其他人push的新代码丢失
git提示可以利用,是让我们知道本身在干什么,而不是告诉我们git push不可,用git push -f 吧。
一般来说,规范的团队都会把git push -f给禁用掉,否则一个人骚操纵,代码丢了,大概啥证据都没有。
reflog 与 reset --hard
如果不小心实行了reset --hard,偶然机调停吗?
git reset --hard head~2
复制代码
答案是还能救济一下:
起首:
git reflog
复制代码
再利用git reset --hard回退到reset的上一个版本
git reset --hard 8ca4549
复制代码
commit的内容返来了,但是工作区和暂存区的内容掉了,找不回了
revert(撤销指定提交)
revert是用来将某次的commit的内容,提取出来到工作区。
如许就可以重新编辑,然后再一次提交。
主要利用场景就是:发现本身某一次提交有点题目,但是在这次提交之前已经有其他人提交了,怎么办呢?
可以用revert
# 查看提交记录
git log --oneline
# 撤销指定的提交
git log revert b1c305d
复制代码
revert并不会修改指定的commit,只会根据指定commit做逆操纵
可以checkout到指定commit,看到内容并没有少:
git checkout -b feature-view b1c305d
复制代码
revert相当于将指定的commit归并到当前的head,还大概辩论。
所以,通常来说还不说直接改。唯一的作用大概就是记不清楚的commit的内容的时间,可以revert能自动帮你做。
stash
stash最常用的场景2个:
我们切分支的时间,偶然间有修改不能切,就可以stash暂存
pull代码辩论,就可以先stash 再pull
# 默认暂存
git stash
# 添加暂存提示信息
git stash save "暂存提示信息"
# 查看暂存了哪些内容
git stash list
# 查看最上面的暂存修改了哪些文件
git stash show
# 查看第2个暂存修改了哪些文件
git stash show stash@{1}
# 查看最上面的暂存修改的具体内容
git stash show -p
# 查看第2个暂存修改的具体内容
git stash show stash@{1} -p
# 应用最上面的暂存,不删除
git stash apply
# 应用第2个暂存
git stash apply stash@{1}
# 应用最上面暂存,并删除(没有冲突才删除)
git stash pop
# 应用第2个暂存,并删除(没有冲突才删除)
git stash pop stash@{1}
# 删除最上面暂存
git stash drop
# 删除第2个暂存
git stash drop stash@{1}
# 删除所有暂存
git stash clear
复制代码
diff
工作区与暂存区差异
git diff
git diff b.txt
# 暂存区的文件在objects中,可以通过下面的命令查看
git cat-file -p 8fec8c3
# 工作区的对象还没有在objects中,会提示找不到对象
git cat-file -p 04a9f41
# 可以通过HEAD查看已经commit的对象
git cat-file -p HEAD:b.txt
git cat-file -p d1d06ad
复制代码
暂存区与HEAD差异
暂存区(stage)HEAD是当前分支最新的commit
git diff --cached
git diff --cached b.txt
复制代码
工作区与HEAD差异
HEAD是当前分支最新的commit(通常就是master),也可以利用指定的commit-id
git diff HEAD
git diff HEAD b.txt
# 工作区与指定commit的差异
git diff commit-id
复制代码
其他比较
# 查看两个commit之间的差异
git diff commit-id1 commit-id2
# 查看不同分支的文件差异
git diff branch-name1:file-path branch-name2:file-path
复制代码
restore、checkout(代码撤回)
推荐利用restore,checkout还是让他去切分支吧。
restore是有递进关系:
可以从暂存区撤回到工作区利用–staged参数(相当于add的逆操纵)
可以直接丢弃工作区的修改
# 丢弃工作区的修改
git restore a.txt
# 等价于
git checkout a.txt
# 丢弃工作区和暂存区所有修改,不能指定文件,指定文件就等价于git checkout filename.txt
git checkout -f
# 将暂存区回退到工作区
git restore --staged a.txt
复制代码
merge、rebase、cherry-pick
merge、rebase、cherry-pick主要是操纵commit:
merge归并代码,注意归并办理辩论就可以
rebase,优化commit,注意修改的开始commit之后没有其他人的提交就可以(如果提示须要git push -f时一定要注意)
cherry-pick是从其他分支挑选commit到当前分支
这里我们重点说一下cherry-pick,比如一个任务我已经开发了一段时间了,但是临时须要发一个修复版本,但是修复版本利用了我开发这段时间的代码,这么办呢?
这个时间就可以利用cherry-pick。
如果有辩论,先办理辩论:
继续cherry-pick:
# 首先切到指定分支
git checkout b1
# 查看需要pick哪些提交
git log --oneline
# 切回到pick分支
git checkout master
# cherry-pick指定的commit
git cherry-pick 1f54b01 0fed6dd
# 如果有冲突手动解决冲突,然后add
git add .
# 继续cherry-pick处理commit信息
git cherry-pick --continue
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
欢乐狗
金牌会员
这个人很懒什么都没写!
楼主热帖
C# 读写文件从用户态切到内核态,到底 ...
LeetCode刷题100道,让你滚瓜烂熟拿下S ...
不到一周我开发出了属于自己的知识共享 ...
我的 Java 学习&面试网站又又又升级了 ...
SQL server 2008 r2 安装教程
基于梯度优化的混沌PSO算法matlab仿真 ...
x64dbg 配置插件SDK开发环境
Spring Boot 多数据源配置
KubeEdge在边缘计算领域的安全防护及洞 ...
开发日志02-解决`response`和SpringAop ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表