当前位置: 首页 > news >正文

通用功能——git 攻略

摘要

本文主要介绍git常用命令的使用方法,同时介绍一些常见问题的处理方法,持续更新中…

git命令通用选项

大多数git命令都适用的选项列表如下:

-v, --verbose         show hash and subject, give twice for upstream branch
-q, --quiet           suppress informational messages
-t, --track           set up tracking mode (see git-pull(1))
--set-upstream        change upstream info
-u, --set-upstream-to <upstream> change the upstream info
--unset-upstream      Unset the upstream info
--color[=<when>]      use colored output
-r, --remotes         act on remote-tracking branches
--contains <commit>   print only branches that contain the commit
--abbrev[=<n>]        use <n> digits to display SHA-1s

常用命令

git help

使用方式如下,其中command_name 具体使用的时候替换成要查询的命令名。

git help <command_name>

git help 命令的输出结构(以输入git help help为例):

NAME(命令名称)git-help - 显示git有关的帮助信息SYNOPSIS(梗概)(相同的option选项会放在同一个[]中,许多命令提供了简写形式)git help [-a|--all] [-g|--guide] [-i|--info|-m|--man|-w|--web] [COMMAND|GUIDE]DESCRIPTION(描述)help命令使用的一些描述(包括如何使用、使用注意事项以及如何能最高效的得到你想要的结果)OPTION(选项)对具体的option选项(即SYNOPSIS中中括号展示出来的选项)具体的解释CONFIGURATION VARIABLES关于该命令的可选配置(即该命令在.gitconfig文件中可以进行的一些配置操作)

首次使用,可以输入git help,该命令会展示一些使用git的总体帮助信息,展示如下:

git命令使用的不同场景:创建一个git工作区 (万里长征的第一步)clone      克隆分支init       创建一个新的git仓库或者重新初始化一个已经存在的git仓库(放心,在一个已经存在的git仓库中执行git init命令是安全的,执行该命令的主要原因是为了快速挑选出新近添加的模版或者使用惊醒仓库移动)针对当前分支的操作 (详情请看:git help everyday)add        将文件添加到git的索引中(方便提交)mv         将文件(目录等)进行移动或重命名reset      将当前分支的HEAD(最新提交)Reset到指定的commitrm         将文件从工作树和工作索引中移除检查历史及状态的相关命令(详情请看: git help revisions)bisect     Find by binary search the change that introduced a buggrep       Print lines matching a patternlog        Show commit logsshow       Show various types of objectsstatus     Show the working tree statusgrow, mark and tweak your common historybranch     查询、创建或删除分支checkout   切换分支或者恢复当前工作区的文件commit     将更改记录到仓库,及本地提交diff       比较不同提交(分支和工作目录)之间的差异等merge      将开发记录合并rebase     将本地提交放在提交记录的顶部(及记录栈栈顶)具体可查看git rebase 中的示例tag        创建、查询、删除或核对一个用GPG协议签名的Tagcollaborate (see also: git help workflows)fetch      拉取更新,不合并pull       拉取更新并合并push       推送更新到相关分支git help -a     列出所有git命令(方便查看有哪些git命令)
git help -g  列出所有概念性的指导(很有用)

git add

git add支持以通配符形式的添加文件

git add .        添加当前目录所有改变(修改、删除、新增)的文件信息到索引库(常用)
git add -u .     添加当前目录所有修改、删除的文件信息到索引库,不处理untracked文件
git add -A .    添加当前目录所有修改、删除的文件信息导索引库,并将untracked文件添加到索引库
git add -i .    交互式添加当目录所有修改、删除、新增的文件信息到索引库

git add -i . 输入之后,会进入一个子命令系统,会列出当前工作目录所有tracked和untracked的文件信息,同时会在下方列出以下八个子命令:

  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp

这八个子命令都是见名知意的,使用方式都是输入相应子命令后,列出带序号的文件列表,选择要操作的文件序号(可多选),执行命令,显示命令结果,之后按回车键,返回子命令系统目录。

git push

首次使用git push命令(即直接输入git push),git 会提示设置set upstream,其实就是让你设置本地分支同远程分支见的对应关系,建立跟踪关系的方法:

  1. 建立分支时采用 —track,如:

    git branch --track local_branch origin/remote_branch_name
    执行之后,本地分支local_branch 和 远程分支remote_branch_name间就建立了跟踪关系
    
  2. 使用—set-upstream(相当于修改项目根目录.get文件夹下的config文件),如:

    git branch --set-upstream test_branch origin/test_branch
    
  3. push操作时使用—set-upstream,如:

    git push origin --set-upstream test_bransh:origin/test_branch
    

push命令具体分析:

git push -u origin local_branch:remote_branch 推送成功后,local_branch和remote_branch间就存在对应关系了;
git push --prune(中文意思裁剪)推送之后,如果本地分支不存在了,同名的远程分支也将被删除
git push -n 模拟推送,除了真正的将更新推送过去这件事不干外,其他push会发生的操作都进行了
git push --delete remote_branch_name删除远程分支remote_branch_name(效果同git push origin :remote_branch_name)
git push --all 推送所有分支
git push --quiet推送之后不现实输出结果,除非发生了错误
git push --progress推送之后显示推送进度

push命令的一些便捷操作:

git push将当前的分支推送到关联的远程分支,没有的话git会予以提示;
git push origin同上,没有的话会报错
git push origin :将当前的分支推送到匹配的远程分支
git push origin master将master分支推送到远程的master分支,如果远程没有,则会创建相同名称的远程分支
git push origin HEAD将当前分支推送到相同名车个的远程分支

git merge

git merge 操作需要操作着熟悉vim编辑器,由于自己使用的较少,顾不做描述,建议采用GUI环境来进行Merge操作(通常就是解决冲突)

待我熟悉了vim,我会不全的。

git checkout

  1. git checkout origin/remote_branch_name,运行该命令会处于HEAD Detached状态,原因是HEAD不能指向远程分支,它只能指向本地的某个commit或者本地分支。当"git checkout 远程分支",而本地又没有这个分支,HEAD就会直接指向远程分支指向的commit了,HEAD指向commit就会进入detached HEAD state。这个以后只要运行以下命令即可:

    git checkout -b 分支名// 运行完之后,在利用git push将新建的本地分支和上面的分支
    // 关联起来即可
    

git pull

首次使用git pull命里该,效果同首次使用git push命令相同。在默认的git pull选项中,该命令相当于执行以下命令组:

git fetch remote
git merge FETCH_HEAD

使用git pull —rebase时,相当于执行以下命令组:

git fetch remote
git rebase

git pull具体分析

pull命令本身只有三个option选项(-q, -v, —[no-]recurese-submodules),但由于pull命令是fetch和merge两个命令的组合,使用pull命令时要注意fetch命令和merge命令的一些注意事项。

git rebase

俗称变基操作,举个栗子来说明(来源于git文档)

Assume the following history exists and the current branch is "topic":A---B---C topic/D---E---F---G masterFrom this point, the result of either of the following commands:git rebase mastergit rebase master topicwould be:A'--B'--C' topic/D---E---F---G master

我的理解就是,将并行两个commit记录(采用新的commit来)串行处理。

rebase过程中如果存在冲突,先解决冲突,然后采用git add .将更改的文件添加到索引库,在继续rebase操作(无需提交),具体命令如下:

git rebase master
git rebase master topic(或者采用git pull --rebase)if(conflicts occures) {First, resolve the conflicts;(实际上就是一些merge操作)Then, git add .(添加merge修改的文件)Finally, git rebase --continue
}
变基操作完成。

rebase过程中如果想放弃变基操作,可采用如下命令:

git rebase --abort该命令会放弃变基,让操纵的回到之前的状态

还有其他选项,会在使用过程中陆续添加

git log

显示提交记录,其选项较多,大多是美化log输出、设置log输出格式、设置log输出范围等

git log --follow <filePath>显示特定文件的历史更改记录
git log -g显示所有的记录(包括丢失的),用来做数据恢复很方便,等同于命令git reflog
git log <revirsion range>显示已定范围的log
git log --merges显示所有的merge记录

git branch

展示、创建或删除分支

git branch列出所有本地分支
git branch -a 列出所有远程分支和本地分支
git branch -r列出所有远程分支
git branch -d local_branch_name删除本地分支(对local_branch_name分支的合并状态有要求,必须完全合并)
git branch -f branch_name创建分支branch_name,如果branch_name存在,则重置(不使用-f的区别就是如果branch_name存在则重用branch_name分支
git branch -D(shortcut for --delete --force)删除本地分支(对local_branch_name分支的合并状态无要求,相当于强删)
git branch -m old_branch_name new_branch_name重命名old_branch_name为new_branch_name(对old_branch_name分支的merge状态有要求)
git branch -M old_branch_name new_branch_name重命名old_branch_name为new_branch_name(对old_branch_name强行重命名)
git branch --color=[always, never, auto] color_branch_name高亮显示color_branch_name这个分支

git config

用来配置仓库或全局的配置选项

// git 全局配置命令

git remote

该命令用来管理已经跟踪的库,常见用法:

 git remote [-v | --verbose]git remote add [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=<fetch|push>] <name> <url>git remote rename <old> <new>git remote remove <name>git remote set-head <name> (-a | --auto | -d | --delete | <branch>)git remote set-branches [--add] <name> <branch>...git remote get-url [--push] [--all] <name>git remote set-url [--push] <name> <newurl> [<oldurl>]git remote set-url --add [--push] <name> <newurl>git remote set-url --delete [--push] <name> <url>git remote [-v | --verbose] show [-n] <name>...git remote prune [-n | --dry-run] <name>...git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]
  1. 如下将本地库添加到远程仓库
git remote add origin https://github.com/Rainmonth/JavaLearn.git
git push -u origin maste

git 大文件提交

参考文章

// GitHub 对提交的文件大小有限制,要小于 100m,即使使用了上面的 git global 

常见问题

中文文件名在git中显示乱码

原因是因为git中文默认以\xxx八进制形式展现,会对对0x80以上的字符进行quote,只要将core.quotepath设置为false即可解决问题

git config --global core.quotepath false

恢复已删除的的分支、会见或丢失的commit

前提是存在恢复的可能性,以下情况不能恢复:

丢失的分支或commit信息没有被git gc清除,一般情况下,gc对那些无用的object会保留很长时间后才清除的。

恢复方法,具体步骤如下:

  1. 执行git reflog(或git log -g)命令,查看所有历史操作信息,得到要恢复的commit的commit id
  2. 执行git branch recover_branch_name commit id命令,创建一个恢复分支;
  3. 将恢复分支合并到当前工作分支,打完收工。

忽略已经跟踪的文件

假设已经跟踪的文件为git.txt,执行以下代码即可

git rm --cached
git update-index --assume-unchanged git.txt
git update-index --no-assume-unchanged git.txt

常用工作流程

重要概念

常用git IDE推荐

SourceTree

相关文章:

通用功能——git 攻略

摘要 本文主要介绍git常用命令的使用方法&#xff0c;同时介绍一些常见问题的处理方法&#xff0c;持续更新中… git命令通用选项 大多数git命令都适用的选项列表如下&#xff1a; -v, --verbose show hash and subject, give twice for upstream branch -q, --quie…...

LemMinX-Maven:帮助在eclipse中更方便地编辑maven的pom文件

LemMinX-Maven&#xff1a;https://github.com/eclipse/lemminx-maven LemMinX-Maven可以帮助我们在eclipse中更方便地编辑maven工程的pom.xml文件&#xff0c;例如补全、提示等。不用单独安装&#xff0c;因为在安装maven eclipse插件的时候已经自动安装了&#xff1a; 例…...

CAD与 PDM系统如何协同工作的?

在产品研发中&#xff0c;CAD&#xff08;计算机辅助设计&#xff09;和PDM&#xff08;产品数据管理&#xff09;是两个核心的工具&#xff0c;它们在产品从设计到制造的整个生命周期中发挥着重要的作用。虽然这两个工具在功能上有所不同&#xff0c;但它们在使用上却有着密切…...

vue-历史模式部署

项目部署 本项目采用nginx进行部署&#xff0c;历史模式的部署需要服务端的配合&#xff0c;本次采用nginx进行配合。 1 配置 const basePath process.env.VUE_APP_BASE_PATH; module.exports {publicPath: basePath #静态资源的路径 /ecology/ }2 创建路由 const createR…...

『Linux升级路』基础开发工具——make/Makefile

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;Linux &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、认识make/Makefile &#x1f4d2;1.1make/Makefile的优点 &#x1f4d2;…...

Python开发技能实战-如何在Visio中添加和删除任意连接点?

问题 在学习或者工作中&#xff0c;我们经常会借助Visio这个软件绘制流程图&#xff0c;在Visio中一般连接点是固定的&#xff0c;固定的连接点只能绘制一条连接线&#xff0c;如下图所示&#xff1a; 但有时候我们需要在两个方框之间绘制双向连接线&#xff0c;达到以下的效果…...

中科驭数受邀出席2023 ODCC冬季全会,共谋开放数据中心创新发展

近日&#xff0c;2023年开放数据中心委员会&#xff08;简称“ODCC”&#xff09;冬季全会在宁夏银川成功召开&#xff0c;中科驭数作为ODCC的新成员单位&#xff0c;受邀出席本次重要会议。 ▲ 中科驭数正式加入ODCC开放数据中心委员会 开放数据中心委员会是在中国通信标准化…...

Leetcode—907.子数组的最小值之和【中等】

2023每日刷题&#xff08;四十二&#xff09; Leetcode—907.子数组的最小值之和 算法思想 参考自y神思想 实现代码 class Solution { public:int sumSubarrayMins(vector<int>& arr) {long long ans 0;const int mod 1e97;int n arr.size();stack<int>…...

下载文件并重命名

//下载文件并重命名 // 无需数字化归档模版下载 function nodigitalMeth(){ let filenameunescape("/projectapp/ghsjy/template/noNeedDigital.docx")//原文件为英文名字 downloadFileRename(filename,"无需成果数据汇交模版") } // 需要数字化归档模版下…...

BGP路由的选路综合实验

题目要求 1.使用PreVal策略&#xff0c;确保R1通过R3到达192.168.10.0/24 2.使用AS_Path策略&#xff0c;确保R1通过R3到达192.168.11.0/24 3.配置MED策略&#xff0c;确保R1通过R3到达192.168.12.0/24 4.使用Local Preference策略&#xff0c;确保R4通过R2到达192.168.1.0/24…...

英语语法:连词or, and, if, unless怎么用?

连词or, and, if, unless怎么用&#xff1f;1. or conj. 或者&#xff0c;还是&#xff0c; 和&#xff0c; 否则用法&#xff1a;并列连词①当“或者&#xff0c;还是”讲时&#xff0c;用在选择疑问句中&#xff0c;是选择疑问句的标志例&#xff1a;Are you a teacher or a …...

基于Spring、SpringMVC、MyBatis的闪烁物业管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的闪烁物业管理系统,java项目。 …...

uni-app 离线打包安卓Apk(小白上手)

场景&#xff1a; 在使用uni-app 开发apk时&#xff0c;使用云打包有次数限制。尤其对于测试阶段是无比难受的&#xff0c;通常是浪费打包次数进行打包或者通过usb 给测试机更新开发环境&#xff0c;但这都是无比漫长的过程 尤其有多个测试机真的是噩梦般的存在 下载离线打包示…...

fatal: refusing to merge unrelated histories報錯咋辦

在 Git 中&#xff0c;如果要合并两个分支&#xff0c;而这两个分支的历史记录不相交&#xff0c;就会出现错误&#xff1a;fatal: refusing to merge unrelated histories。 要解决这个问题&#xff0c;有以下几种方法&#xff1a; 首先&#xff0c;检查一下你正在合并的两个…...

第二十二章 解读pycocotools的API,目标检测mAP的计算COCO的评价指标(工具)

Pycocotools介绍 为使用户更好地使用 COCO数据集, COCO 提供了各种 API。COCO是一个大型的图像数据集&#xff0c;用于目标检测、分割、人的关键点检测、素材分割和标题生成。这个包提供了Matlab、Python和luaapi&#xff0c;这些api有助于在COCO中加载、解析和可视化注释。 …...

如何避免光模块接口受到污染?

光模块作为光通信领域一个重要的配件&#xff0c;实现光电和电光的转换&#xff0c;和光纤连接&#xff0c;承载了数据流量的快速转换与传输。因而在整个网络体系中&#xff0c;起着至关重要的作用。虽然光模块在使用过程中&#xff0c;不像交换机和服务器等网络设备一样需要经…...

虚拟机系列:Oracle VM VirtualBox虚拟机的使用教程和使用体验情况反馈

Oracle VM VirtualBox虚拟机的使用教程和使用体验情况反馈 一. 简述:二. 下载三. 安装解压后选择需要的版本点击安装1:第一步,点击安装,点击下一步2. 这里直接点击下一步,3. 网络警告选择:是4. 准备好以后,点击安装5. 点击完成即可四. 打开五. 创建虚拟机1. 输入虚拟机名…...

echarts 通用线性渐变堆叠面积图

echarts 通用线性渐变堆叠面积图 getLineData2() {const myChart echarts.init(this.$refs.chartDom);const option {tooltip: {trigger: axis,},legend: {show: false,textStyle: {fontSize: 14, //字体大小color: #ffffff, //字体颜色},data: [AAA, BBB],},grid: {show: tr…...

在云服务器上搭建个人版chatGPT及后端Spring Boot集成chat GPT

原创/朱季谦 本文分成两部分&#xff0c;包括【国内服务器上搭建chat GPT】和【后端Spring Boot集成chat GPT】。 无论是在【国内服务器上搭建chat GPT】和【后端Spring Boot集成chat GPT】&#xff0c;两个方式都需要魔法访问&#xff0c;否则是无法正常使用的&#xff0c;即…...

MYSQL基础知识之【索引】

文章目录 前言MySQL 索引普通索引创建索引修改表结构(添加索引)创建表的时候直接指定删除索引的语法唯一索引创建索引修改表结构创建表的时候直接指定使用ALTER 命令添加和删除索引使用 ALTER 命令添加和删除主键显示索引信息 后言 前言 hello world欢迎来到前端的新世界 &…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...