论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
开源技术
›
开源技术
›
一文了解Git日常利用
一文了解Git日常利用
忿忿的泥巴坨
金牌会员
|
2024-12-22 14:22:40
|
显示全部楼层
|
阅读模式
楼主
主题
796
|
帖子
796
|
积分
2388
Git 基本利用
在基本利用之前,须要熟悉一下Git的工作区、暂存区和版本库的概念
工作区: 开发环境中的目次,当前的改动未被记录到版本控制中。
暂存区:暂时存储区域,包罗了即将被提交到版本库中的文件快照,在提交之前可以选择性的将工作区中的改动添加到暂存区。
版本库:包罗该项目标所有版本历史记录。通常我们的代码库会维护在远程,所以版本库分为本地版本库和远程版本库。
让我们来看下,这几个区是怎么举行交互的:
从上图中我们可以看到
1、工作区 -> 暂存区
利用git add 命令将文件添加到暂存区。
// 添加某一文件名为fileName的文件
git add fileName
// 添加所有改动的文件
git add .
复制代码
2、暂存区->本地目次树(本地版本库)
利用git commit将暂存区中的所有文件添加到本地目次树中
git commit -m "本次提交说明"
复制代码
3、本地目次树->远程版本库
利用git push将本地版本库的代码同步到远程代码库
git push origin branch-name
复制代码
4、远程版本库->本地版本库
如果是第一次从远程代码库拉代码到本地,通常本地是没有版本库的,所以我们利用git clone 将远程代码库克隆到本地;如果不是第一次(已经和远程仓库绑定)那么可以利用git push 大概git fetch + git merge将代码拉下来,并同步到本地版本库和工作区。
// 同步远程版本库并合并到当前工作区
git pull origin branch-name
// 同步远程版本库
git fetch origin branch-name
// 合并代码
git merge origin/branch-name
复制代码
Git 创建仓库
1、新起一个项目
如果是新起一个项目标话,须要搞定本地仓库和远程托管,假设利用github作为远程托管代码的平台的话,可以先在github上创建一个仓库,如许远程托管部门就完成了,本地仓库的创建有多种方式,这里先容两种环境:
a、 不须要通过工具结构化创建模板代码
: 那么直接git clone 命令将远程仓库down下来就行。
// git clone <Git仓库> <本地目录名称>
git clone git://github.com/****/demo.git GitDemo
// 如果不指定本地目录名称,那么会默认使用demo作为目录名称
git clone git://github.com/****/demo.git
复制代码
然后在该目次中操纵即可。
b、须要通过工具结构话创建模板代码
(比如在Android Studio中创建了一个项目,Idea 会自动生成很多模版代码文件):这个时候就须要自行和远程仓库关联。
// 如果工具没有帮忙生成git仓库,那需要自行生产,如果自动生成,则省略这步
// 进入到项目的目录
git init
// 需要和远程仓库关联,才能推送到远程
git remote add <地址>
// 然后将所有文件添加到本地仓库
// 也就是 一套组合拳
git add .
git commit -m "init"
git push
复制代码
2、在旧项目上迭代
比如说,作为新人参与已经迭代了的项目时,这种环境比较简朴,只须要将远程仓库git clone下来就行,然后就能开始开发了~
git clone <地址> <目录>
复制代码
Git 分支管理
1、创建新分支及切换
// 创建一个 new-branch 分支
git branch new-branch
// 切换到 new-branch 分支
git checkout new-branch
// 切换分支还有一种方法 推荐 (因为git checkout负载比较重,容易混)
git switch new-branch
复制代码
2、删除分支
git branch -d new-branch
复制代码
3、分支归并
在协同合作的过程中,在开发分支完成开发后须要归并到公共分支,大概公共分支有新的提交,须要归并到开发分支,这些都涉及到分支的归并,git提供了两种归并分支的能力,开发者可以根据自己的需求去选择不同的方法举行分支归并。
git merge
将其他分支的改动点归并后在当前分支上生成一个最新的提交记录(额外的),这种方法可以比较清晰的看出各个分支间的交互,改动的来源;不好的地方是会使的整个提交记录比较杂。
// 当前分支 current 和 公共分支 main
// 现在将当前分支的代码改动合并到公共分支
// 首先切换到公共分支
git switch main
// merge
git merge current
// 执行上述代码后,会生成一个新的节点 c5在main分支上
复制代码
归并前:
执行上述代码,归并后
从main分支合到current分支同理,只不外脚色转换了。
git rebase
当执行rebase时,git会从两个分支的共同祖先开始提取待变基分支上的修改,然后将待变基分支指向基分支的最新提交,末了将刚才提取的修改应用到基分支的最新提交的背面。
(这里大家大概会对待变基分支、和基分支的概念有疑问)
假设我们现在在current分支上举行了部门修改,然后此时公共分支main有新的改动,我们须要将main分支的改动归并到current分支上,那么current分支是
待变基
分支,main是
基
分支
// 把main的改动合并到current
// git rebase main
复制代码
归并前:
归并后:
归并后发现current改动前的基点变成了main中最新的节点,如许做可以使得整个提交记录是一条直线,但是他的缺点也很明显,就是无法溯源改动,所以通常在
开发过程中,会约定不能在公共分支举行rebase
,否则会导致公共分支的提交记录被修改,使得记录不清晰。
所以不能在公共分支举行rebase 不能在公共分支举行rebase 不能在公共分支举行rebase!!!
Git 提交记录管理
1、HEAD
HEAD会指向一个提交记录,当它指向这个提交记录时,你所做的操纵都是基于该提交记录举行的,默认环境下,HEAD总是指向当前分支最新的提交记录,但是在某些环境下,我们可以分离HEAD使其指向我们须要的提交记录,以完成须要举行的操纵。
// 假设当前提交记录的引用为 c1
// 那么我们将HEAD分离出来
git checkout c1
复制代码
那现在要将其指向c0,该怎么做呢?其实也很简朴,只须要知道c0的引用的哈希值就行
git checkout c0
复制代码
如果我们不知道某个提交记录的哈希值(固然可以通过git log看到提交记录的哈希值),但是可以很直观的看到它的相对位置呢?这就须要学习到几个特别符号啦~
2、相对引用 ~ 和 ^
相对引用不同于通过哈希值的方式举行指向改变,它可以通过当前位置举行相对移动。
利用 ^ 向上移动
1
个提交记录
利用 ~N 向上移动
N
个提交记录
向上移动一个提交记录
git checkout HEAD^
复制代码
再向上移动2个提交记录
git checkout HEAD~2
复制代码
3、撤销提交
当提交的改动不须要时,要举行回滚的操纵,git也提供了多种方法举行代码的回滚。
git reset
重置当前分支到特定提交(该提交的内容不会被重置),会更改历史提交记录,实用于未提交到远程版本库的修改。
// 首先需要知道要回滚到具体提交记录的哈希值(当然也可以使用相对引用)
git reset c2
// 相对引用法,两者效果相同
git reset HEAD~2
复制代码
reset 一共有四种回滚模式, 默认利用的是Mixed模式举行的回滚。
Mixed: 重置 HEAD 到指定的提交,暂存区重置,但工作目次保持稳定。
soft: 只重置 HEAD 到指定的提交,暂存区和工作目次保持稳定。
hard: 重置 HEAD 到指定的提交,暂存区和工作目次都重置。
keep: 重置 HEAD 到指定的提交,暂存区重置,工作目次仅重置提交的代码,其余的保持稳定。
// soft
git reset <提交记录哈希> --soft
// mixed
git reset <提交记录哈希> --mixed
// hard
git reset <提交记录哈希> --hard
// keep
git reset <提交记录哈希> --keep
复制代码
git revert
撤销一系列提交,不会修改历史记录,但是会生成一个新的提交记录(该提交记录的内容会剔除咱们须要撤销的内容),这个利用于已经提交到远程仓库的修改。并且和reset不同的是,在举行回滚时,回滚的内容也包罗我们指定的提交记录中包罗的内容(也就是回滚到该记录的上一级)
// 回滚到c2
git revert c2
// 使用相对引用
git revert HEAD~2
复制代码
4、自由修改提交树
git cherry-pick
如果想要复制一些提交记录到当前地点位置(HEAD)下的话,可以利用git cherry-pick命令,被选中的提交记录会依次被添加到当前位置的背面。
// 需要知道提交记录的哈希值
git cherry-pick c2 c4
复制代码
修改前
修改后:
git rebase -i
交互式 git rebase用法,可以通过相对引用的方式修改提交记录, 再利用这个命令后会出现一个文本编辑,通过改变每个提交前的pick选择来改变改记录的保留大概是否和其他记录归并
git rebase -i HEAD~3
复制代码
输入命令后进入到下面的文本编辑页面
将feat 15移除的话,须要将Feat: 15 前的pick改为drop即可
修改完成后输入 :wq 即可退出编辑
完成操纵后的效果如下:
else case
case
: 举行reset、revert等操纵时,操纵失误导致须要的记录丢失,怎么找回?
可以通过git reflog 检察历史操纵记录,然后找到回归丢失前的哈希值,然后通过git reset 将丢失的记录找回。
git reset <需要恢复的哈希值>
复制代码
强烈推荐 Learn Git Branching
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
忿忿的泥巴坨
金牌会员
这个人很懒什么都没写!
楼主热帖
axios 传递参数的方式(data 与 params ...
食品商城网站设计—食品商城购物网站(8 ...
springmvc异常处理解析#ExceptionHandl ...
Kubernetes(K8S) Controller - Deploym ...
最佳实践-使用Github Actions来构建跨 ...
day3 函数的定义和调用,练习编写简单 ...
MySQL 并行复制方案演进历史及原理分析 ...
【iOS逆向与安全】frida-trace入门 ...
[20221018]本地运行与远程运行.txt ...
深度剖析Redis九种数据结构实现原理, ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表