实际开发中常用的Git操作

文章目录

  • 前言
  • 基础知识
    • 集中式版本控制 - SVN
    • 分布式版本控制 - Git
    • 常用的Linux命令
    • Git工作区域
  • Git 常用命令
    • 获取Git仓库
    • 添加/提交/推送/删除/回退文件
    • 查看信息
    • Git分支
    • Git标签
    • Gitk:一个排查Git问题的工具

前言

git是用C语言开发的,以追求最高的性能。git自动完成垃圾回收,也可以用命令git gc --prune直接调用。

基础知识

集中式版本控制 - SVN

所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。

所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。

分布式版本控制 - Git

每个人都拥有全部的代码。

所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

不会因为服务器损坏或者网络问题,造成不能工作的情况!

Git下载:https://git-scm.com/

Git Bash应用:Unix与Linux风格的命令行,使用最多,推荐最多;

Git GUI应用:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令;

GitK命令:内建的图形化 git,打开Git Bash进入相应的git仓库输入gitk即可。

常用的Linux命令

cd		进入目录
cd ..	回退上一个目录
pwd		显示当前所在目录路径
ls(ll)	列出当前目录中所有文件,后者更为详细(加-al查看隐藏文件)
touch	新建一个文件如touch test.txt就会在当前目录下新建test.txt文件
rm		删除一个文件如rm test.txt就会删除当前目录下的test.txt文件(加-rf删除文件夹无需确认)
mkdir	新建一个文件夹

Git工作区域

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、本地仓库、远程仓库(Remote Directory)

Workspace:工作区,就是你平时存放项目代码的地方;
Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息;
Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本;
Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换。

日常使用要记住上图6个命令 + review操作:

git clone - 克隆
git checkout - 检出
git add - 增加
git commit - 提交
git push - 推送
git pull --rebase - 拉取
git review branch_name - review
团队内会有一位Code reviewer,负责代码管理的,团队成员一般执行完git commit之后,不会自己手动执行git push,而是执行git review,而后有reviewer检验完代码后,进行git push。

Git 常用命令

获取Git仓库

当前目录新建一个Git代码库
$ git init


从远程克隆
$ git clone 远程Git仓库地址
$ git clone -b 分支名 远程Git仓库地址


显示所有远程仓库
$ git remote -v

添加远程仓库
$ git remote add 名称 url地址
$ git remote add origin git@github.com:XXX/XXX.git


移除远程仓库 - 只是在本地移除记录,并不会影响远程仓库
$ git remote rm 名称 (一般是origin)

从远程拉取代码
$ git pull 名称 (一般是origin) 分支名 (master分支)
$ git pull 名称 分支名 --allow-unrelated-histories

git pull = git fetch + git merge FETCH_HEAD
​git pull --rebase = git fetch + git rebase FETCH_HEAD

​**
解决连接远程仓库出现ssl认证问题
$ git config --global http.sslVerify “false”


测试一下通不通
$ ssh -T git@github.com

添加/提交/推送/删除/回退文件

添加指定文件到暂存区,如果是多个文件,使用空格分隔
$ git add 文件 文件 …
当前目录及其子目录的文件都加入到暂存区
$ git add .


代码从暂存区提交到本地仓库
$ git commit -m “描述信息”

**本地推送到远程仓库
$ git push 名称 (一般是origin) 分支名 (master分支)
第一次提交
$ git push -u origin 分支名
需要输入用户名和密码

删除文件
$ git rm 文件

将暂存区文件取消暂存
$ git restore --staged 文件


将本地仓库文件回退到上个版本
$ git reset --hard HEAD^


回退到前3次提交之前,以此类推,回退到n次提交之前
$ git reset --hard HEAD~3

退到/进到 指定commit的sha码,提交ID可使用git log查看
$ git reset --hard 提交ID

查看信息

查看文件状态
$ git status


查看文件修改哪些内容
$ git diff


查看日志记录
$ git log


查看当前分支的版本历史
$ git log

搜索提交历史,根据关键词
$ git log -S 关键词

显示指定文件是什么人在什么时间修改过
$ git blame 文件

显示今天你写了多少行代码
$ git diff --shortstat “@{0 day ago}”

显示当前分支的最近几次提交
$ git reflog


显示所有提交过的用户,按提交次数排序
$ git shortlog -sn

Git分支

查看本地分支
$ git branch
查看远程分支
$ git branch -r
查看远程全部分支
$ git branch -a


创建分支
$ git branch 分支名

切换分支
$ git checkout 分支名

将本地分支推送到远程仓库
$ git push orighn 分支名

合并分支
$ git merge 分支名
例子:将b分支合并到a分支下
$ git checkout a
$ git push orighn b

删除分支
$ git branch -b 分支名
强制删除
$ git branch -D 分支名
删除远程仓库分支
$ git push orighn -b 分支名

代码冲突解决
打开冲突文件并修复冲突内容,最后执行git add命令

Git标签

创建标签
$ git tag 标签名

查看标签
$ git tag

查看信息
$ git show 标签名

将当前标签推送远程仓库
$ git push origin 标签名

检出标签 - 在新的基础上创建新的分支再进行开发
$ git checkout -b 新的分支名 标签名

删除本地标签
$ git tag -d 标签名
删除远程仓库标签
$ git push origin :refs/tags/远程仓库标签名

Gitk:一个排查Git问题的工具

gitk是一个非常强大的图形化工具,现在安装git会自带gitk的应用程序,在代码库的根目录下直接输入gitk会打开这个界面:
在这里插入图片描述
gitk的主界面主要包含5个部分:

  1. 主菜单栏显示区
  2. 提交信息显示区,显示提交的基本信息,包括节点树、message、提交人和提交时间
  3. 查询条件检索区,根据检索条件查找的窗口
  4. 具体内容显示区,显示 commit 的变更记录或两个 commit 的 diff 内容
  5. 文件列表显示区,显示的commit的文件列表或两个commit的diff文件列表

每个点代表一次提交,线代表父子关系,而彩色的方块则用来标示一个个引用。 黄点表示 HEAD,红点表示尚未提交的本地变动。

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

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

相关文章

mysql面试题44:MySQL数据库cpu飙升的话,要怎么处理?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL数据库cpu飙升的话,要怎么处理呢? 当MySQL数据库的CPU使用率飙升时,可能表示数据库负载过重或存在性能问题。以下是处理MySQL数据库CPU飙…

TongWeb8的启、停功能场景说明

前言: TongWeb8除了正常的startserver.sh、stopserver.sh启停功能外,还有开机自启、宕机重启、定时重启、内存溢出重启、禁止非法退出等功能,以适应不同场景,保证应用系统的可靠性。 场景一:开机自启 前提条件&#…

Linux友人帐之网络配置与网络传输

一、相关概念 IP地址 IP地址(Internet Protocol Address)是用于唯一标识和定位计算机网络中设备(如计算机、服务器、路由器等)的数字标识。在互联网中,IP地址是用来进行网络通信和数据传输的基础。 IP地址由32位或128…

Kotlin函数作为参数指向不同逻辑

Kotlin函数作为参数指向不同逻辑 fun sum(): (Int, Int) -> Int {return { a, b -> (a b) } }fun multiplication(): (Int, Int) -> Int {return { a, b -> (a * b) } }fun main(args: Array<String>) {var math: (Int, Int) -> Intmath sum()println(m…

正点原子嵌入式linux驱动开发——Linux内核顶层Makefile详解

之前的几篇学习笔记重点讲解了如何移植uboot到STM32MP157开发板上&#xff0c;从本章就开始学习如何移植Linux内核。 同uboot一样&#xff0c;在具体移植之前&#xff0c;先来学习一下Linux内核的顶层Makefile文件&#xff0c;因为顶层 Makefile控制着Linux内核的编译流程。 L…

JRebel在IDEA中实现热部署 (JRebel实用版)

JRebel简介&#xff1a; JRebel是与应用程序服务器集成的JVM Java代理&#xff0c;可使用现有的类加载器重新加载类。只有更改的类会重新编译并立即重新加载到正在运行的应用程序中&#xff0c;JRebel特别不依赖任何IDE或开发工具&#xff08;除编译器外&#xff09;。但是&…

jvm--对象实例化及直接内存

文章目录 1. 创建对象2. 对象内存布局3. 对象的访问定位4. 直接内存&#xff08;Direct Memory&#xff09; 1. 创建对象 创建对象的方式&#xff1a; new最常见的方式、Xxx 的静态方法&#xff08;单例模式&#xff09;&#xff0c;XxxBuilder/XxxFactory 的静态方法Class 的…

Unity基础课程之物理引擎6-关于物理材质的使用和理解

每个物体都有着不同的摩擦力。光滑的冰面摩擦力很小&#xff0c;而地毯表面的摩擦力则很大。另外每种材料也有着不同的弹性&#xff0c;橡皮表面的弹性大&#xff0c;硬质地面的弹性小。在Unity中这些现象都符合日常的理念。虽然从原理上讲&#xff0c;物体的摩擦力和弹性有着更…

2023全国大学生软件测试大赛开发者测试练习题99分答案(ScapegoatTree2023)

2023全国大学生软件测试大赛开发者测试练习题99分答案(ScapegoatTree2023) 题目详情题解代码(直接全部复制到test类中即可)提示:该题只需要分支覆盖得分即可,不需要变异得分 题目详情 题解代码(直接全部复制到test类中即可) package net.mooctest;import static org.…

数据结构—顺序表

目录 1.线性表 2.顺序表概念 3.实现顺序表 (1)声明结构体 (2)初始化 (3)打印数据 (4) 销毁 (5)尾插&头插 尾插 判断是否扩容 头插 (6)尾删&头删 尾删 头删 (7)指定位置插入元素 (8)删除指定位置元素 (9)查找指定元素位置 (10)修改指定位置元素 完整版…

RustDay03——记录刷完Rust100题

刷了两三天Rust&#xff0c;终于把Rust100题刷完了&#xff0c;小小记录一下 明天白天的时候重开账户开题写答案

gpio内部结构(一)

一&#xff0c;GPIO内部结构 1&#xff0c;保护二极管 * 引脚内部加上这两个保护二级管可以防止引脚外部过高或过低的电压输入。 * 当引脚电压高于 VDD_FT 或 VDD 时&#xff0c;上方的二极管导通吸收这个高电压。 * 当引脚电压低于 VSS 时&#xff0c;下方的二极管导通&…

如何在edge浏览器中给PDF添加文字批注

我用的edge浏览器是目前最新版的&#xff08;一般自动更新到最新版&#xff09; 最近&#xff0c;我喜欢用edge浏览器查看PDF&#xff0c;节省电脑资源&#xff0c;快捷且方便。 但edge对PDF的标注种类较少&#xff0c;主要是划线和涂色&#xff0c;文字批注功能尚未出现在工具…

查看和分析 IIS 日志文件以增强 Web 服务器安全性

Microsoft IIS服务器&#xff0c;无论是Web还是FTP&#xff0c;对于企业来说都是必不可少的。但是&#xff0c;IT 安全管理员的工作并不止于部署 IIS 服务器。部署后&#xff0c;管理员必须采取安全措施来保护这些服务器&#xff0c;监控 IIS 服务器安全性的一种行之有效的方法…

Exposure Normalization and Compensation for Multiple-Exposure Correction 论文阅读笔记

这是CVPR2022的一篇曝光校正的文章&#xff0c;是中科大的。一作作者按同样的思路&#xff08;现有方法加一个自己设计的即插即用模块以提高性能的思路&#xff09;在CVPR2023也发了一篇文章&#xff0c;名字是Learning Sample Relationship for Exposure Correction。 文章的…

Sentinel Dashboard 接入 Nacos 动态数据源 Zuul 接入 Sentinel 实战

背景 Sentinel Dashboard 默认将限流、熔断等规则保存在内存中&#xff0c;然后同步给连接 Dashboard 的客户端&#xff0c;客户端也是保存在内存中。 那么如果当 Sentinel Dashboard 异常重启&#xff0c;那么之前配置的规则将全部丢失&#xff0c;需要重新进行配置。 其中&a…

二叉搜索树--查询节点-力扣 700 题

例题细节讲过(二叉搜索树的基础操作-CSDN博客)&#xff0c;下面给出递归实现 public TreeNode searchBST(TreeNode node, int val) {if(node null) {return null;}if(val < node.val) {return searchBST(node.left, val);} else if(node.val < val) {return searchBST(…

VsCode同时编译多个C文件

VsCode默认只能编译单个C文件&#xff0c;想要编译多个文件&#xff0c;需要额外进行配置 第一种方法 ——> 通过手动指定要编译的文件 g -g .\C文件1 .\C文件2 -o 编译后exe名称 例如我将demo.c和extern.c同时编译得到haha.exe g -g .\demo.c .\extern.c -o haha 第二种…

解决github加载过慢问题

github打不开怎么办&#xff1f;看到这篇文章&#xff0c;一切都稳了&#xff01; DNS被污染&#xff0c;一句话&#xff0c;修改系统hosts文件&#xff01; 1.hosts文件在哪&#xff1f;C:\Windows\System32\drivers\etc 2.用记事本打开hosts&#xff0c;在最后加入以下两行…

中科院提出“思维传播”,极大增强ChatGPT等模型复杂推理能力

中国科学院自动化研究所与耶鲁大学计算机系研究人员联合发布了&#xff0c;一份名为《思维传播:用大型语言模型进行基于类比的复杂推理》的论文。 ChatGPT等大型语言模型展示出了超强的创造能力&#xff0c;只需简单的文本提示就能生成小说、营销创意、简历等各种文本内容。但…