通用功能——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

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

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

相关文章

Vim 一下日志文件,Java 进程没了?

一次端口告警&#xff0c;发现 java 进程被异常杀掉&#xff0c;而根因竟然是因为在问题机器上 vim 查看了 nginx 日志。下面我将从时间维度详细回顾这次排查&#xff0c;希望读者在遇到相似问题时有些许启发。 时间线 15:19 收到端口异常 odin 告警。 状态:P1故障 名称:应用端…

黑马点评笔记 redis实现优惠卷秒杀

文章目录 难题全局唯一IDRedis实现全局唯一Id 超卖问题问题解决方案乐观锁问题 一人一单 难题 要解决优惠卷秒杀的问题我们要考虑到三个个问题&#xff0c;全局唯一ID&#xff0c;超卖问题&#xff0c;一人一单。 全局唯一ID 用户抢购时&#xff0c;就会生成订单并保存到同一…

【git】pip install git+https://github.com/xxx/xxx替换成本地下载编译安装解决网络超时问题

目录 &#x1f311;&#x1f311; 背景 &#x1f312; &#x1f312;作用 &#x1f314;&#x1f314; 问题 &#x1f314;&#x1f314;解决方案 &#x1f319;方法一 &#x1f319;方法二 &#x1f31d;&#x1f31d;我的解决方案 整理不易&#xff0c;欢迎一键三连…

7-12 统计投票情况(集合)

7-12 统计投票情况&#xff08;集合&#xff09; 分数 10 作者 python课程组 单位 福州大学至诚学院 利用集合分析活动投票情况。 第一小队有五名队员&#xff0c;序号是1,2,3,4,5&#xff1b;第二小队也有五名队员&#xff0c;序号6,7,8,9,10。 输入一个由得票队员编号组成的…

分布式篇---第三篇

系列文章目录 文章目录 系列文章目录前言一、什么是补偿事务?二、消息队列是怎么实现的?三、那你说说Sagas事务模型前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。…

qgis添加postgis数据

左侧浏览器-PostGIS-右键-新建连接 展开-双击即可呈现 可以点击编辑按钮对矢量数据编辑后是直接入库的&#xff0c;因此谨慎使用。

【DQN】基于pytorch的强化学习算法Demo

目录 简介代码 简介 DQN&#xff08;Deep Q-Network&#xff09;是一种基于深度神经网络的强化学习算法&#xff0c;于2013年由DeepMind提出。它的目标是解决具有离散动作空间的强化学习问题&#xff0c;并在多个任务中取得了令人瞩目的表现。 DQN的核心思想是使用深度神经网…

企业数字化转型的作用是什么?_光点科技

在当今快速变化的商业环境中&#xff0c;数字化转型已成为企业发展的重要策略。企业数字化转型指的是利用数字技术改造传统业务模式和管理方式&#xff0c;以提升效率、增强竞争力和创造新的增长机会。 提升运营效率&#xff1a;数字化转型通过引入自动化工具和智能系统&#x…

指数退避重试

指数退避重试&#xff08;Exponential Backoff and Retry&#xff09;是一种网络通信中常用的错误处理和重试策略。它通常用于处理临时性的故障&#xff0c;例如网络延迟、服务器过载或临时性的错误&#xff0c;以提高系统的可靠性和稳定性。 基本思想是&#xff0c;当发生一个…

NX二次开发UF_CSYS_ask_wcs 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_ask_wcs Defined in: uf_csys.h int UF_CSYS_ask_wcs(tag_t * wcs_id ) overview 概述 Gets the object identifier of the coordinate system to which the work coordin…

JMeter压测常见面试问题

1、JMeter可以模拟哪些类型的负载&#xff1f; JMeter可以模拟各种类型的负载&#xff0c;包括但不限于Web应用程序、API、数据库、FTP、SMTP、JMS、SOAP / RESTful Web服务等。这使得JMeter成为一个功能强大且灵活的压力测试工具。 2、如何配置JMeter来进行分布式压力测试&a…

在华为昇腾开发板安装gdal-python

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 在华为昇腾开发板安装gdal-python分为两步:编译gdal库和下载gdal对应的python包。 1.编译gdal库 首先下载gdal库,。在linux(arm架构)上编译的gdal库及其第三方库源码,内含一个编译…

智慧法院 | RPA+AI打造智慧执行助手,解决“案多人少”现实难题

为深化政法智能化建设&#xff0c;加强“智慧治理”“智慧法院”“智慧检务”“智慧警务”“智慧司法”等信息平台建设&#xff0c;深入实施大数据战略&#xff0c;实现科技创新成果同政法工作深度融合。法制日报社于今年3月继续举办了2023政法智能化建设创新案例及论文征集宣传…

Unity UGUI的HorizontalLayoutGroup(水平布局)组件

Horizontal Layout Group | Unity UI | 1.0.0 1. 什么是HorizontalLayoutGroup组件&#xff1f; HorizontalLayoutGroup是Unity UGUI中的一种布局组件&#xff0c;用于在水平方向上对子物体进行排列和布局。它可以根据一定的规则自动调整子物体的位置和大小&#xff0c;使它…

Shell脚本:Linux Shell脚本学习指南(第二部分Shell编程)二

第二部分&#xff1a;Shell编程&#xff08;二&#xff09; 十一、Shell数组&#xff1a;Shell数组定义以及获取数组元素 和其他编程语言一样&#xff0c;Shell 也支持数组。数组&#xff08;Array&#xff09;是若干数据的集合&#xff0c;其中的每一份数据都称为元素&#…

Navicat 技术指引 | GaussDB服务器对象的创建/设计(编辑)

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持对GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构同步、协同合作、数据迁移等&#xff09;&#xff0c;这…

【华为OD题库-034】字符串化繁为简-java

题目 给定一个输入字符串&#xff0c;字符串只可能由英文字母(a ~ z、A ~ Z)和左右小括号()组成。当字符里存在小括号时&#xff0c;小括号是成对的&#xff0c;可以有一个或多个小括号对&#xff0c;小括号对不会嵌套&#xff0c;小括号对内可以包含1个或多个英文字母也可以不…

Jenkins Ansible 参数构建

首先在Jenkins中创建自由项目 在web端配置完成后在另一台机子上下载nginx 在gitlab端创建项目并创建文件配置代码 在有Jenkins的机器上下载Ansible [rootslave1 ~]# yum -y install epel-release [rootslave1 ~]# yum -y install ansible再进入下载nginx机器中克隆gitlab项目…

Android 框架层AIDL 添加接口

文章目录 AIDL的原理构建AIDL的流程往冻结的AIDL中加接口 AIDL的原理 可以利用ALDL定义客户端与服务均认可的编程接口&#xff0c;以便二者使用进程间通信 (IPC) 进行相互通信。在 Android 中&#xff0c;一个进程通常无法访问另一个进程的内存。因此&#xff0c;为进行通信&a…

卷积神经网络(AlexNet)鸟类识别

文章目录 一、前言二、前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集 三、AlexNet (8层&#xff09;介绍四、构建AlexNet (8层&#xff09;网络模型五、…