git常见使用

1. 概念

  • 分布式,有远程仓库和本地仓库的概念,因此要注意同步问题
  • git是面向对象的,本质是内容寻址系统。.git目录下有个文件夹objects,存储git库中的对象,git就是根据object建立一种树形结构,将文件和通过hash的方式关联起来

2. 工作区 暂存区 本地仓库 远程仓库

关系图如下:
在这里插入图片描述

  • workspace:工作区,平时写代码的地方
  • index:暂存区,让写完后的代码变成待提交状态
  • repository:本地仓库,提交暂存区的代码,记录进入代码本地管理
  • remote:远程仓库,将本地仓库修改好的代码提交到远程,可供远程协作的人下载

当创建一个git项目,git会在根目录创建一个git目录,需要重点理解的是以下五个:

  • HEAD:是指针的指针,用来标记当前的提交
    • 新建一个分支的时候其实仅仅是改变了HEAD的指向,这也是git分支比较轻量的原因
  • hooks:用来在git操作前后进行一些操作
  • index:本地的暂存区
  • objects是上面所提到的内容
  • refs:分支的引用

简单来说,repository由git维护的三棵“树”组成:

  • workspace:持有实际文件
  • index:像个缓存区域,临时保存你的改动
  • HEAD:指向最后一次提交的结果

3. 提交代码

开始git操作本地必须有一份代码和remote相连,要么从remote拉取(适用于代码存在remote的情况),要么自己上传本地代码连接remote(适用于repository初次上传到remote的情况)

  • git clone <url>:克隆remote的版本到本地,成功后本地就有了一样的代码,并且也已经与remote连接成功

上传本地代码并连接remote操作大致如下:

1. 在项目的根目录打开Git Bash Here
2. 执行以下步骤:git initgit add .git commit -m "first commit"git remote add origin 远程仓库地址git push -u origin master

修改代码后将其提交到index:

  • git add .:添加当前目录所有文件到index
  • 提交后没有任何提示,可以用git status查看文件是否有修改,是否进入index,已经提交到repository的不会展示

将index里文件提交到repository,这是个离线操作:

  • git commit -m "message":将index里文件提交到repository,message的位置填写本次提交修改的内容和一些注释

将repository提交到remote:

  • git push <remote> <branch><remote>位置填写remote名称,<branch>填写需要提交的分支
    • git push origin master:推送到远程origin仓库的master分支

4. 关于协作

拉取remote代码到repository:

  • git pull <remote> <branch><remote>写remote名称,<branch>写拉取remote的分支
    • git pull origin master:拉取远程origin仓库的master分支到repository
  • 将代码提交到remote之前,最好先拉取一下远程的最新代码,以免产生冲突

4.1 分支

在合作中有可能会有并行开发的需求,但可能不会同时上线,不能把没有开发完成的分支上线,所以就出现了分支branch

分支的功能:从同一份稳定代码拉出有相同代码的分支,每个人在自己的分支上开发提交代码,不会互相打扰,完成后再进行代码的合并

  • master是默认的分支,在其他分支上进行开发,完成后再将它们合并到主分支上
  • 除非将分支推送到远程仓库,不然该分支是不为别人所见的

举个例子实践一下:

  • git checkout -b dev:创建并切换到dev分支
    • 加上-b参数表示创建并切换
    • git branch dev + git checkout dev
  • git branch:查看所有本地分支,当前分支前面会标一个*号
  • git branch -d dev:删除dev分支

4.2 合并分支

合并之前确保要合并的两个分支都是当前分支的最新代码(pull一下),再切换到要保存合并代码的分支

  • git merge <branch>:合并指定分支到当前分支
  • git log --graph:查看分支合并图
  • 合并后可能出现冲突,需要修改文件手动合并这些冲突
  • git add <filename>:来标记合并成功

常见冲突管理:

  • git merge --abort:撤销合并操作,回到开始合并之前的状态
  • 当解决完冲突后,在合并完成后发现一个错误,git reset --hard就可以回滚到那个合并之前的状态

git常见命令速查表:
在这里插入图片描述

5. 常见场景及解决方案

5.1 stash

场景:正在feature分支下开发新需求,但是线上突然出现bug要马上修复,需要切到master分支

只需要git stash就可以把代码存起来,修复完线上问题后切回feature分支,用git stash apply就可恢复代码

一些相关命令:

# 保存当前未commit的代码
git stash# 保存当前未commit的代码并添加备注
git stash save "备注的内容"# 列出stash的所有记录
git stash list# 删除stash的所有记录
git stash clear# 应用最近一次的stash
git stash apply# 应用最近一次的stash,随后删除该记录
git stash pop# 删除最近的一次stash
git stash drop

5.2 reset –soft

应用场景:有的时候不小心把不该提交的内容commit了,想改回来就只能再commit一次,但就多了一条“黑历史”

只需要`git reset --soft HEAD^,相当于后悔药,可以再次修改重新提交,保持干净的commit记录,这说的是未push的commit。

对于已经push的commit也可以使用该命令,不过再次push时,由于远程分支和本地分支有差异,需要强制推送git push -f来覆盖被reset的commit

PS:在reset --soft指定commit时,会将该commit到最近一次commit的所有修改内容全部恢复,而不是只针对该commit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/549385.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPS制作甘特图

“ 甘特图&#xff08;Gantt chart&#xff09;又称为横道图、条状图&#xff08;Bar chart&#xff09;&#xff0c;通过条状图来显示项目、进度和其他时间相关的系统进展的内在关系随着时间进展的情况。” 设置基础样式 设置行高 设置宽度 准备基础数据 计算持续时间 …

【早鸟优惠|高录用|EI稳定检索】2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)诚邀投稿/参会!

【早鸟优惠|高录用|EI稳定检索】 2024年虚拟现实、图像和信号处理国际学术会议&#xff08;ICVISP 2024&#xff09;诚邀投稿/参会&#xff01; # 早鸟优惠 # 先投稿先送审 # #投稿免费参会、口头汇报及海报展示# 2024年虚拟现实、图像和信号处理国际学术会议&#xff08;I…

【开发】SpringBoot 整合 Redis

目录 前言 1. Redis 的下载及安装 1.1 Redis 的下载 1.2 安装 Redis 1.3 启动 Redis 2. 创建 SpringBoot 项目整合 Redis 2.1 环境要求 2.2 SpringBoot项目构建 2.2.1 方式一 2.2.2 方式二 2.3 在 pom.xml 文件中导入依赖坐标 2.4 在 application.properties 中加…

STM32CubeIDE基础学习-BEEP蜂鸣器实验

STM32CubeIDE基础学习-BEEP蜂鸣器实验 文章目录 STM32CubeIDE基础学习-BEEP蜂鸣器实验前言第1章 硬件介绍第2章 工程配置2.1 工程外设配置部分2.2 生成工程代码部分 第3章 代码编写第4章 实验现象总结 前言 前面学习了LED闪烁实验&#xff0c;现在来学习一下蜂鸣器发声实验&am…

以太坊开发学习-solidity(二)值类型

文章目录 第一个Solidity程序编译并部署代码变量值类型1. 布尔型2. 整型3. 地址类型4. 定长字节数组 第一个Solidity程序 开发工具&#xff1a;remix 本教程中&#xff0c;我会用remix来跑solidity合约。remix是以太坊官方推荐的智能合约开发IDE&#xff08;集成开发环境&#…

gPTP简介

1、gPTP&#xff08;generalized precision time protocol&#xff09;广义时钟同步协议 gPTP&#xff08;generalized precision time protocol&#xff09;广义时钟同步协议&#xff0c;即IEEE 802.1AS协议。它是IEEE 1588协议的延伸&#xff0c;可以为TSN提供全局精准…

[蓝桥杯]真题讲解:砍树(DFS遍历、图的存储、树上差分与LCA)

[蓝桥杯]真题讲解&#xff1a;砍树&#xff08;DFS遍历、图的存储、树上差分与LCA 一、视频讲解二、暴力代码三、正解代码 一、视频讲解 视频讲解 二、暴力代码 #include<bits/stdc.h> #define int long long using namespace std; const int N 1e5 10;typedef pai…

Gitlab-runner注册与配置

文章目录 概要操作流程获取HTTPS证书上传证书修改gitlab-runner dns配置文件gitlab-runner 注册 概要 本文主要介绍了Gitlab-runner在内网环境注册到gitlab的操作方式。内网环境如下&#xff1a; 1、gitlab-runner由docker镜像部署&#xff1b; 2、gitlab部署与内网&#xff0…

数据中心的规划设计初探

阅读<<IT基础架构&#xff1a;系统运维实践>>节选 如何避免变化打乱规划 因为需求的不确定性&#xff0c;需求变更是不可避免的&#xff0c;那么提前预判并采取积极有效的应对措施就显得十分重要了 资源预留不能闭门造车&#xff0c;必须和业务方进行充分沟通&a…

云手机的数据安全有保障吗?

随着移动互联网的迅速发展&#xff0c;云手机作为一种新兴的移动终端技术&#xff0c;正在逐渐受到人们的关注和应用。然而&#xff0c;对于云手机而言&#xff0c;数据安全问题一直是人们关注的焦点之一。本文将探讨云手机的数据安全性&#xff0c;并分析其是否具备足够的保障…

[ 云计算 | AWS ] ChatGPT 竞争对手 Claude 3 上线亚马逊云,实测表现超预期

文章目录 一、前言二、Claude 3 介绍以及相关测试细节三、在亚马逊云科技上体验 Claude 33.1 在 Amazon Bedrock 服务中配置 Claude 33.2 为聊天配置使用 Claude 3 模型3.3 Caude 3 Sonet 聊天体验 四、文末总结五、参考文献 一、前言 3月4号&#xff0c;Anthropic 发布了号称…

深入解析:在 Node.js 中删除文件的正确姿势

引言 在 Node.js 中处理文件尤其是移除文件&#xff0c;对于维护高效应用程序至关重要。储存和秩序当道的今天&#xff0c;删除不必要或冗余的文件能力显得尤为关键。本文深入探讨你会想要使用这个强大功能的时刻和原因&#xff0c;并通过各种案例展示了这个概念&#xff0c;同…