当前位置: 首页 > 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欢迎来到前端的新世界 &…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

联邦学习带宽资源分配

带宽资源分配是指在网络中如何合理分配有限的带宽资源&#xff0c;以满足各个通信任务和用户的需求&#xff0c;尤其是在多用户共享带宽的情况下&#xff0c;如何确保各个设备或用户的通信需求得到高效且公平的满足。带宽是网络中的一个重要资源&#xff0c;通常指的是单位时间…...