【Git CMD】Git常用命令总结

2023-11-17

目录

0 git的工作区、暂存区、本地仓库和远程仓库

0.1 图解

在这里插入图片描述

0.2 解析

平时我们写的代码都是在 工作区(workspace) ,执行add命令后就是提交到了 暂存区(Index) ,再执行commit命令后就把代码提交到了 本地仓库(Repository) 了,最后再执行push命令把本地代码提交到 远程仓库(Remote)

反过来,执行pull命令可在本地有版本库时,将 远程仓库(Remote) 最新的commit数据合并到 工作区(workspace) ;执行fetch命令在本地有版本库时,同步 远程仓库(Remote) 的分支与 本地仓库(Repository) 的分支;执行checkout命令可切换指定分支。而执行clone命令可在本地没有版本库时,从 远程仓库(Remote) 克隆整个版本库到 本地仓库(Repository)

1 本地仓库

1.1 创建版本库

在工作区的一个合适的地方,创建一个空目录,运行Git CMD,使用init命令创建版本库(Repository),这是一个空的仓库(empty Git repository),其下有一个.git目录,是Git用于跟踪及管理版本库的。

git init #在当前目录下初始化本地仓库,即生成版本库(.git目录)

git init [目录名] #同时创建一个版本库和一个目录,版本库(.git目录)生成在该目录下

1.2 分支

主分支(Master/Main)是 Git 的一个默认分支。它在项目的第一次提交时被实例化。当你开始提交时,主分支的指针会自动向前移动。一个版本库只能有一个主分支。

Git 分支实际上是指向更改快照的指针。一个分支(branch)代表一条独立的开发线,分支的使用可以从主线(Master/Main)上分离开来,直到该分支开发得差不多了再合并到主线(Master/Main)上来。
在这里插入图片描述

1.2.1 查看本地仓库的分支信息

git branch #查看本地仓库的分支信息
#或
git branch --list

对于列出的分支,其中*标记的表示当前所在的分支。

1.2.2 创建分支

git branch [分支名] #创建指定名称的分支

1.2.3 切换分支

git checkout [分支名] #切换当前分支到指定分支

git branch -m master #切换到主分支

git checkout -b [分支名] #创建指定名称的分支并切换至该分支

1.2.4 重命名分支

git branch -m [原分支名] [新分支名] #将原分支名改为新分支名

1.2.5 合并分支

git merge [分支名] #将当前分支合并到主分支

1.2.6 删除分支

git branch -d [分支名] #删除本地仓库的指定分支(如果该分支有未合并的修改,Git会阻止你删除它)
#或
git branch -D [分支名]

1.3 添加文件到暂存区

1.3.1 添加单个文件

git add [文件名] #添加指定文件到暂存区

1.3.2 添加多个文件

git add [文件名1] [文件名2] ... #添加指定文件到暂存区

1.3.3 添加所有文件

git add [目录名] #添加指定目录下的文件到暂存区

git add . #一次性添加当前目录下的所有文件到暂存区

git add -A #同样也是将仓库中所有的文件添加到暂存区(A表示All)

1.3.4 删除暂存区的文件

如果该文件在工作区删除前已添加至暂存区,使用以下命令删除暂存区的该文件。

git add [已从工作区删除的文件名] #从暂存区删除该文件

1.3.5 只添加有更新及新增的文件

git add --ignore-removal . #忽略删除的文件

1.3.6 添加所有更新及删除的文件

git add -u #忽略新增的文件(u表示untracted)

1.3.7 添加符合格式的文件

git add *.txt #添加所有txt文件(可根据自行需要修改文件格式了类型参数)

1.4 查看本地仓库和暂存区的状态

status命令可以用来检查文件是否被追踪(tracked),然而不能看到提交记录与信息。

git status #查看上次提交后是否有对文件再次修改的详细信息
git status -s #查看上次提交后是否有对文件再次修改的简短信息,其中新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记(s全称short)

1.5 提交文件

commit命令为项目创建快照,可以将项目恢复到需要的版本。两个不同的提交不会被覆盖,这是因为每个提交都会有一个由SHA(安全哈希算法)创建的加密数字commit-id。

git commit -m "[注释]" #把暂存区内的文件提交到本地仓库,引号内为提交文件的相关说明信息(m全称message)

git commit [文件名1] [文件名2] ... -m "[注释]" #提交暂存区的指定文件到暂存区

git commit -a #提交所有有修改的文件(不需要执行add命令),忽略新创建的文件

1.6 查看本地仓库提交的历史

1.6.1 常规参数

log命令用于查看本地仓库提交的记录。一个git日志包含以下数据:

  • 提交的id。一个由SHA(安全哈希算法)算法生成的40个字符的检查和数据。
  • 提交的作者元数据。作者的信息,如作者姓名和电子邮件。
  • 提交的日期元数据。一个提交时间的日期时间戳。
  • 提交的标题/信息。在提交信息中给出的提交概述。
git log #查阅提交的历史记录

git log --online #一行显示一个提交信息,提交的id只显示前7个字符

git log --stat #显示被修改的文件及修改的行数

git log --patch #不仅显示被修改的文件及修改的行数,还显示添加、删除和更新的行的位置
#或
git log -p

git log --graph #以图表形式查看提交日志,通常和--online参数结合使用

q #退出log命令,回到bash

1.6.2 筛选参数

可以使用一些筛选参数获取自己所需要的提交记录。如通过数量、日期、作者筛选等。

①通过数量筛选

git log -<n> #其中n表示num,即可得到最后n次提交信息

②通过日期筛选

git log --after="yy-mm-dd" --before="yy-mm-dd" #其中yy表示year,mm表示month,dd表示day,即可得到在指定日期范围内的所有提交信息

git log --after="22 days ago" #可得到22天前的提交信息

git log --after="2 weeks ago" #可得到2周前的提交信息

#after与before可用since和until代替,它们是同义词

③通过作者筛选

git log --author="作者名" #可得到指定作者的提交信息(其中作者名可省略一些字符,因引号内接受一个正则表达式)

git log -author="@gmail.com" #可得到使用google邮箱的作者的提交信息

④通过commit时的注释信息筛选

git log --grep="注释" #可得到指定注释信息的提交信息(其中注释可省略一些字符,因引号内接受一个正则表达式)

1.7 比较在暂存区与工作区的差异

git diff [文件名] #显示暂存区和工作区的差异

git diff --cached [文件名] #显示暂存区和上一次提交(commit)的差异
#或
git diff --staged [文件名] 

git diff [commit-id1] [commit-id2] #显示两个指定提交间的差异

git diff [分支名1] [分支名2] #显示两个分支间的差异

1.8 回退版本

HEAD说明:

  • HEAD 表示当前版本

  • HEAD^ 上一个版本

  • HEAD^^ 上上一个版本

  • HEAD^^^ 上上上一个版本

  • HEAD~0 表示当前版本

  • HEAD~1 上一个版本

  • HEAD^2 上上一个版本

  • HEAD^3 上上上一个版本

git reset HEAD^ #回退所有内容到上一个版本

git reset HEAD^ [文件名] #回退指定文件到上一个版本

git reset [commit-id] #回退到指定版本

git reset --soft HEAD~<n> #回退到前n个版本,其中n表示num,用相应数字填入

git reset --hard HEAD #hard参数将撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交,慎用!

git checkout -- [文件名] #撤销指定文件的修改,即回到最近一次commit或add时的状态

1.9 在暂存区和工作区删除文件

git rm [文件名] #删除在暂存区和工作区的指定文件

git rm -f [文件名] #如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f

git rm --cached [文件名] #如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,则使用 --cached 选项

1.10 在暂存区和工作区重命名文件

git mv [原文件名] [新文件名] #将原文件名改为新文件名

git rm -f [原文件名] [新文件名] #如果新文件名已经存在,则必须要用强制重命名选项 -f

2 远程仓库

2.1 查看远程仓库相关信息

git remote #简短列出当前远程仓库的名称

git remote --verbose #详细列出当前远程仓库的名称及仓库地址
#或
git remote -v

git remote show [远程仓库名] #查看某个远程仓库的详细信息(包括仓库地址及分支信息)

2.2 查看远程仓库的分支信息

git branch -r #查看远程仓库的分支信息

2.3 删除远程仓库的分支

git push [远程仓库名] -delete [分支名] #删除远程仓库的指定分支

2.4 删除远程仓库

git remote rm [远程仓库名] #删除指定远程仓库
#或
git remote remove [远程仓库名]

2.5 修改远程仓库名

git remote rename [原远程仓库名] [新远程仓库名] #修改原远程仓库名为新远程仓库名

2.6 修改远程仓库的URL

git remote set-url [远程仓库名] [新url] #修改远程仓库的链接为新url

3 本地仓库与远程仓库

3.1 克隆远程仓库的项目到本地仓库

git clone [远程仓库url] #url为远程仓库的HTTPS地址
git clone -b [分支名] [远程仓库url] #从远程仓库拉取指定的某一个分支,url为远程仓库的HTTPS地址

当使用上述命令克隆一个远程仓库时,远程仓库会被添加一个默认的名字"origin"。

3.2 从远程仓库获取数据到本地仓库

git fetch origin #获取远程仓库的更新到本地(不会合并或修改)

git merge #提取获取到的数据并合并到本地仓库的当前分支

以上两句命令时常一起使用。

git pull origin #获取远程仓库的数据并合并到当前分支,等同于fetch+merge命令

3.3 关联本地仓库到服务器仓库

git remote add origin git@ip:your_name/project_name.git #查看本地仓库和远程仓库的所有分支信息

3.4 查看所有分支信息

git branch -a #查看本地仓库和远程仓库的所有分支信息

3.5 同步分支

git fetch #同步远程仓库的分支与本地仓库的分支

3.6 拉取分支

3.6.1 将远程仓库指定分支拉取到本地仓库指定分支

git pull origin [远程分支名]:[本地分支名]

3.6.2 将远程仓库指定分支拉取到本地仓库当前分支

git pull origin [远程分支名]

3.6.3 拉取远程分支并同时创建对应的本地分支

git checkout -b [本地分支名] origin/[远程分支名]

3.7 推送分支

3.7.1 将本地当前分支推送到远程指定分支

git push origin [本地分支名]:[远程分支名]

3.7.2 将本地当前分支推送到与本地当前分支同名的远程分支

git push origin [本地分支名]

3.7.3 强制将本地当前分支推送到与本地当前分支同名的远程分支

git push --force origin [本地分支名] #在本地版本与远程版本有差异的情况下,使用强制推送
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Git CMD】Git常用命令总结 的相关文章

  • 为什么 PS1 不更新 git 分支名称?

    PS1 w git branch grep cut b 3 100 我按上面设置我的 PS1 但在我更改分支后 它不会更新提示中的分支名称git checkout 或使用以下命令更改存储库cd 如何解决这个问题 当反引号引用位被评估时PS1
  • 获取自分离父分支以来的提交日志,包括父分支的最新提交

    我正在尝试创建一个快速的 bash 函数 该函数返回 oneline自当前分支从其父分支分支以来的每次提交的日志 以及包括先前提交的行 这是我到目前为止所拥有的 stolen from another Stack Overflow ques
  • 如何查看合并到合并提交中的提交?

    If my feature branch被合并到my main branch 我怎样才能看到合并了哪些提交my feature branch git log abc123 abc123显示合并到合并提交中的提交abc123 创建一个git
  • 无法签出以连字符 (-) 开头的 git 分支

    我克隆了一个 git 存储库 该存储库有一个远程分支 例如 feature abc 当我打字时git checkout feature abc I get error unknown switch e 知道如何结帐这个分支吗 尝试使用以下语
  • 在heroku上部署git子目录

    我必须从非主分支部署 git 子目录 我看过这个答案 https stackoverflow com questions 7539382 how can i deploy from a git subdirectory and to Her
  • 将 CVS 升级到 git/hg 的技巧?

    我们仍然使用 CVS 我使用 git 和 hg 供我个人使用 尽管我对这两个工具仍然是新手 但我意识到它们更现代 更好 更快 分布式等 只是每个人都如此习惯 CVS 以至于我觉得如果我是推荐并实际将我们当前的 CVS 服务器升级 移植 转换
  • 如何在Windows平台上编写Git Server Hooks?

    我找不到任何适用于 Windows 的 Git 挂钩的明确示例 我在 Windows Server 上使用 Bonobo Git Server 我需要预提交和提交后挂钩作为 cmd 或 bat 预提交应检查空注释 提交后应发送有关提交的电子
  • git rebase 冲突是由哪个提交引起的

    当我执行 git rebase master 时 有时会发生冲突 有时 即使有错误消息 也很难追踪问题 如果我能找出 git 正在尝试重新申请并导致冲突的提交 这将是一个真正的帮助 如何找出哪个提交导致了冲突 查看冲突的文件 以开头的行 g
  • 作曲家转储自动加载和 git

    为了部署实用性 我们决定将供应商目录提交到 git 存储库中 一切正常 但是每次我们运行 Composer dump autoload 时 它都会修改以下文件 这非常烦人 因为它似乎并不代表文件的特定状态 每次重新运行它时它看起来都像一个随
  • eGit 合并解决方案 - 使用您的副本

    我对 eGit 还是新手 我正在尝试弄清楚到底如何让 eGit 使用我的副本解决合并冲突 无需任何更改 我指的是 eGit Wiki 上的注释 http wiki eclipse org EGit User Guide Possible m
  • gitosis 要求输入密码

    我已经按照以下说明设置了 gitosis 服务器here http scie nti st 2007 11 14 hosting git repositories the easy and secure way 它对于初始用户来说效果很好
  • 为什么会导致合并冲突?

    这是我的 git 存储库的初始快照 在树枝上master file m1包含 L1 在树枝上dev file m1包含 L1 L2 如果我尝试合并dev from master 这会导致冲突 git checkout master Swit
  • Git - 如何压缩对被忽略文件的更改而不丢失这些更改?

    我想使用 git 保存应用程序随时间使用的实际依赖项的历史记录 其保真度比我从包管理器获得的保真度更高 我正在使用这些分支 master 仅源代码 依赖于 gitignore 构建 源代码和依赖项 build TIMESTAMP 用于强制提
  • 无法获取 https://gerrit.googlesource.com/git-repo/clone.bundle

    我尝试按照以下说明创建一个 git 存储库 source android com source downloading html installing repo 但是当我尝试在工作目录中初始化存储库时 使用 Ubuntu 出现以下错误 wo
  • 为什么我的 git 预提交钩子不修剪行尾的空白?

    我在 Mac Mojave 上 我在 git templates hooks pre commit 创建了一个文件 我想删除我正在提交的文件行尾的空格 我希望这种情况在全球范围内发生在我的所有项目中 A git hook script to
  • 执行 rebase 后,Git 提交会在同一分支中重复

    我理解 Pro Git 中提出的场景是关于变基的危险 https git scm com book en v2 Git Branching Rebasing rebase peril 作者基本上告诉你如何避免重复提交 不要对已推送到公共存储
  • Git 注释详细信息

    我读了this http git scm com 2010 08 25 notes html and this https github com blog 707 git notes display但仍然认为它们晦涩难懂 目前为止了解到 创
  • 为什么 ssh-agent 需要 root 访问权限?

    我刚刚安装了 Archbang 并尝试克隆我的 Git 项目 这需要 SSH 密钥 过去 我在 Ubuntu 和 RedHat 机器上遵循 Github 指南取得了成功 但由于某种原因 它在我的新 Arch 安装上不起作用 我已使用以下命令
  • Docker 错误:无法找到包 git

    我正在使用图像nginx这是基于dockerfile ubuntu 连接到 docker 容器的 shell docker exec it
  • `.gitignore` 用于具有 Android 目标的 Ionic 项目

    我正在使用 Capacitor 创建一个 Ionic 项目 编辑 与 Cordova 相比更新的推荐框架 并添加 Android 作为目标 我已经能够构建应用程序并添加 Android 目标 这会在android using ionic b

随机推荐

  • ubuntu密码正确,却不能登录图形界面

    传统的方法是修改 Xauthority文件权限 不过我试了没有用 后来发现我的问题是因为安装了NVIDIA cuda驱动而导致的 所以先卸载nvidia驱动 再更新 就可以正常进入了 命令 sudo apt get remove purge
  • FreeRTOS临界段

    1 临界段 在访问共享资源时不希望被其他任务或者中断打断的代码 这段要执行的代码称为临界段代码 2 设置临界段的目的 保护共享资源 例如 全局变量 公共函数 不可重入函数 函数里面使用 了一些静态全局变量 malloc 等 保护外设的实时性
  • [技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览

    目录 前言 第1章 什么是信息与通信 第2章 为啥要编制信息与通信发展规划 第3章 信息与通信如何高质量发展 重点 3 0 发展目标 编辑 3 1 建设新型数字基础设施 3 1 1 移动通信网 无线接入层 1G到5G 3 1 2 固定宽带网
  • android 使用 ImageLoader 显示文章和图片

    android 中使用Textview 显示文章及图片 1 下载 universal image loader 1 9 5 jar 添加到app项目中 2 在android 后台 的 onCreate 方法中初始化 ImageLoader
  • 利用Unidbg辅助还原哔哩哔哩Sign算法.

    bilibili unidbg http www zhuoyue360 com crack 87 html 老色批想抓哔哩哔哩的全站数据 通过人工智能自动找出美女 色 咱们想抓它一个个人信息 抓包分析 1 android 7 0 证书配置
  • vector容器

    1 vector简介 vector 和 arry 非常相似 唯一存在的不同是 vector 是动态分配内存空间 随着元素的增加空间自动增加 但是 arry 是静态的 wector 单端动态数组容器 只允许在一端进行操作 2 vector的使
  • 力扣网题号:389找不同python 实现

    题目描述 给定两个字符串 s 和 t 它们只包含小写字母 字符串 t 由字符串 s 随机重排 然后在随机位置添加一个字母 请找出在 t 中被添加的字母 示例 输入 s abcd t abcde 输出 e 解释 e 是那个被添加的字母 一 题
  • ElementUI表单校验

    ElementUI表单校验 回忆jQuery表单校验是怎么做的 表单元素注册事件 事件绑定回调函数 在回调函数中获取用户输入的值 用js代码进行校验 用正则表达式进行校验 ElementUI校验 写校验规则 绑定校验规则
  • 扫码支付流程

    一 支付宝接入实现 1 流程 step1 用户在浏览器中访问商家网页应用 选择商品下单 确认购买 接口会调起支付宝客户端内的支付模块 此时会从商家网页应用跳转到支付宝客户端中并开始支付 支付完成后会跳转回商家网页应用内 最后商家展示支付结构
  • Redis之List类型原理和应用场景(三)

    Redis之List类型原理和应用场景 三 原理分析 由于C语言是没有list的设计 首先我们看一下普通双向链表结构 typedef struct listNode 前置节点 struct listNode prev 后置节点 struct
  • J1939协议中CAN ID 与PGN互换--遇到了广播报文

    Ref J1939 Explained A Simple Intro 2021 CSS Electronics Ref CAN 帧ID 与J1939 PGN 转换例子 horse 2007s的博客 CSDN博客 Ref 在J1939中多帧数
  • Linux下Docker安装mysql

    1 下载mysql镜像 访问 MySQL 镜像库地址 https hub docker com mysql tab tags 也可以用命令查看可用版本 docker search mysql 下载mysql镜像 默认下载最新稳定版 dock
  • C语言中putchar()函数的使用

    今天教C语言中的输入输出语句 对函数putchar 函数有些好奇 难道就只能输出char型的数据么 带着这样的疑问 在环境上进行了验证 验证结果还蛮有意思 共享一下 当我们定义一个变量a 并给a赋予0 255的值 很显然没有问题 如代码 i
  • ERP订单管理的操作与设计--开源软件诞生19

    赤龙ERP订单模块讲解 第19篇 用日志记录 开源软件 的诞生 点亮星标 祈盼着一个鼓励 博主开源地址 码云 https gitee com redragon redragon erp GitHub https github com red
  • GC算法原理

    JVM 垃圾回收原理 对于JVM的垃圾收集 GC 这是一个作为Java开发者必须了解的内容 那么 我们需要去了解哪些内容呢 其实 GC主要是解决下面的三个问题 哪些内存需要回收 什么时候回收 如何回收 回答了这三个问题 也就对于GC算法的原
  • sudo堆缓冲区溢出提权漏洞(CVE-2021-3156)

    0x01 漏洞描述 这个漏洞被披露于2021年1月26日 漏洞的载体是我们常用的sudo命令 当sudo通过 s或 i命令行选项在shell模式下运行命令时 它将在命令参数中使用反斜杠转义特殊字符 但使用 s或 i标志运行sudoedit时
  • CTF MISC解题思路BUUCTF MISC9-16刷题

    1 文件中的秘密 查看文件属性备注 flag 870c5a72806115cb5439345d8b014396 2 wireshark 使用wireshark打开文件 菜单 编辑 查找分组 搜索关键字flag 在数据包中找到flag 3 L
  • 量化交易系统框架

    转自 https www cnblogs com huangfuyuan category 1290537 html
  • 华为OD机试 - 最大花费金额(Python)

    题目描述 双十一众多商品进行打折销售 小明想购买自己心仪的一些物品 但由于受购买资金限制 所以他决定从众多心仪商品中购买三件 而且想尽可能的花完资金 现在请你设计一个程序帮助小明计算尽可能花费的最大资金数额 输入描述 输入第一行为一维整型数
  • 【Git CMD】Git常用命令总结

    目录 0 git的工作区 暂存区 本地仓库和远程仓库 0 1 图解 0 2 解析 1 本地仓库 1 1 创建版本库 1 2 分支 1 2 1 查看本地仓库的分支信息 1 2 2 创建分支 1 2 3 切换分支 1 2 4 重命名分支 1 2