Study Git - Shell command with Git

news2025/8/3 2:46:22

前言

这一部分内容主要记录git使用时的重要命令,文章参考:

  • MIT Missing class
  • Git Pro

Basic

  • git help \<command>: get help for a git command
  • git init: creates a new git repo, with data stored in the .git directory
  • git status: tells you what’s going on
  • git add <filename>: adds files to staging area
  • git commit: creates a new commit
  • git log: shows a flattened log of history
  • git log --all --graph --decorate: visualizes history as a DAG
  • git diff : show changes you made relative to the staging area
  • git diff <revision> <filename>: shows differences in a file between snapshots
  • git checkout <revision>: updates HEAD and current branch
  • git reset HEAD <FILE>:unstage the file

Explanation:

  1. git init 会创建一个名为.git的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件。
  2. git add *.c 将已经存在的文件加入Stage(暂存区)开始追踪这些文件,或者精确地将内容添加到下一次提交中。git add 命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件。

我开始一直没想明白为啥不可以commit的时候选择一些文件,这样也同样可以达到commit部分文件的效果。后面发现git add可以对stage内容进行反复修改,git add根据文件最新的数据生成snapshot(blob|tree),但是不会存入到git repo中,我一定程度上理解了stage存在的必要性。 假设你在开发feature1,你完成了一部分工作但是并没有全部完成,这时候的内容不应该被添加到commit chain中,因为这不是一个完整的可用的实现,但是通过git add添加到stage就不存在这个担心,这个有两个好处,一个是当你后续开发完feature1时,可以再次git add进stage,然后commit上去一个最终确定的版本;另一个是当你接下去开发时发现出问题了,想回到git add时暂存的状态,因为这个是正确的,那么可以通过git restore来抛弃在工作目录中新增的修改。 如果这里用commit去保存feature1的部分代码,然后再用第二次commit保存第二次代码,这样会出现很多的snapshot上的重复(应该吧)。
这里也体现了git设计和使用的哲学,commit提交的,是确定可行的完整实现,如果没有完成,用git add来暂存。

  1. git diff 不加任何参数比较的是工作目录中当前文件和暂存区域快照之间的差异。 也就是修改之后还没有暂存起来的变化内容。若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --staged 命令。 这条命令将比对已暂存文件与最后一次提交的文件差异。请注意,git diff 本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。 所以有时候你暂存了所有更新过的文件,运行 git diff 后却什么也没有,就是这个原因。
  2. git commit 当暂存区已经准备就绪,可以提交了。 在此之前,请务必确认还有什么已修改或新建的文件还没有 git add 过, 否则提交的时候不会记录这些尚未暂存的变化。不加任何参数的git commit会启动你选择的文本编辑器来输入提交说明。在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
  3. git log 打印commit的信息,-<n>显示最近n条的commit信息,参数-p 显示diff信息,参数--since=2008-01-15显示这一天之后的commit,参数--stat显示精简后的信息。下面的例子显示的是筛选了作者,时间,但没有合并的commit的git log用法
$ git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01"  --before="2008-11-01" --no-merges -- t

Branching and merging

  • git branch: shows branches
  • git branch <name>: creates a branch
  • git branch -d <name>: delete a branch
  • git checkout -b <name>: creates a branch and switches to it, same as git branch <name>; git checkout <name>
  • git merge <revision>: merges into current branch
  • git mergetool: use a fancy tool to help resolve merge conflicts
  • git rebase: rebase set of patches onto a new base

Explanation:
分支实际上就是一个指向commit的指针,创建一个新的分支实际上就是在当前的commit上新建一个指针,在某一个分支上开发实际上就是这个指针以前一个commit为parent不断继续创建新的commit,head表示的其实指向当前所在的本地分支的指针。删除分支也只是删除指针,而不是删除commit在这里插入图片描述

  1. git merge <revision>会合并分支,合并过程中出现fast-forwad表示由于你想要合并的分支所指向的提交 C4 是你所在的提交 C2 的直接后继,

在这里插入图片描述
after merge
在这里插入图片描述
如果合并的分支没有后继的关系,例如
在这里插入图片描述
合并后的会生成一个新的commit,这次提交的特别之处在于有多个不同的父提交
在这里插入图片描述

  • 有时候合并操作不会如此顺利。 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们。 如果你对 issue53问题的修改和有关 hotfix 分支的修改都涉及到同一个文件的同一处,在合并它们的时候就会产生合并冲突:

Remotes

  • git remote: list remotes
  • git remote add <name> <url>: add a remote
  • git push <remote> <local branch>:<remote branch>: send objects to remote, and update remote reference
  • git branch --set-upstream-to=<remote>/<remote branch>: set up correspondence between local and remote branch
  • git fetch: retrieve objects/references from a remote
  • git pull: same as git fetch; git merge
  • git clone: download repository from remote
    Explanation
  1. git remote列出的是仓库服务器的名字,例如origin,这是默认名字 。你也可以指定选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。
  2. git remote add <shortname> <url> 添加一个新的远程 Git 仓库,同时指定一个方便使用的简写
  3. git fetch <remote> 这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。必须注意 git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。运行 git pull 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
  4. git push <remote> <branch> 当你想要将 master 分支推送到 origin 服务器时(再次说明,克隆时通常会自动帮你设置好那两个名字), 那么运行这个命令就可以将你所做的备份到服务器。
  5. 如果想要查看某一个远程仓库的更多信息,可以使用 git remote show <remote> 命令
  6. git remote remove | git remote rm : 如果因为一些原因想要移除一个远程仓库——你已经从服务器上搬走了或不再想使用某一个特定的镜像了, 又或者某一个贡献者不再贡献了——可以使用 git remote remove 或 git remote rm

Undo

  • git commit --amend: edit a commit’s contents/message
  • git reset HEAD <file>: unstage a file
  • git checkout -- <file>: discard changes

Explanation

  1. git commit --amend用于当忘记将一部分修改过的文件放入stage然后commit时,它会撤销上次的commit,将后面添加stage内容重新生成一次commit。
  2. git reset HEAD <file> 会将暂存区的文件删除
  3. git checkout – <file> 会删除掉工作目录的改动,从暂存区中恢复工作目录

Advanced Git

  • git config: Git is highly customizable
  • git clone --depth=1: shallow clone, without entire version history
  • git add -p: interactive staging
  • git rebase -i: interactive rebasing
  • git blame: show who last edited which line
  • git stash: temporarily remove modifications to working directory
  • git bisect: binary search history (e.g. for regressions)
  • .gitignore: specify intentionally untracked files to ignore

git的内容很多,想要详细需要细看书里的内容

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

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

相关文章

pytest学习和使用9-fixture中conftest.py如何使用?

9-fixture中conftest.py如何使用&#xff1f;1 引入2 conftest.py简介3 conftest.py特点4 实例4.1 conftest.py4.2 test_conftest1.py4.3 test_conftest2.py5 conftest.py优先级1 引入 之前学习使用fixture前置实现用例的登陆&#xff0c;当时在一个脚本中实现的&#xff1b;那…

基于PHP+MySQL学生创新作品展示系统的设计与实现

MySQL学生创新作品展示系统的基本功能包括用户注册登录,发布作品,查看作品和对评论评论以及在线留言等信息。 PHP本科学生创新作品展示系统是一个服务类型的网站,系统通过PHp&#xff1a;MySQL进行开发,分为前台和后台两部分,前台部分主要是让大学生查看和发布创新作品使用的。…

N3-PEG-MAL,Azdio-PEG-Maleimide,一种点击化学PEG试剂

击化学PEG试剂叠氮-聚乙二醇-马来酰亚胺&#xff0c;该化学试剂其英文名为Azdio-PEG-Maleimide&#xff0c;&#xff08;N3-PEG-MAL&#xff09;。所属分类为&#xff1a;Azide PEG Maleimide PEG。 化学试剂叠氮-PEG-马来酰亚胺的分子量均可定制&#xff0c;有&#xff1a;N3…

音视频开发面试题集锦

下面是 2022.06 月音视频面试题集锦内容的节选&#xff1a; 一、如何根据 NALU 裸流数据来判断其是 H.264 编码还是 H.265 编码&#xff1f; 1&#xff09;通常我们不是根据 NALU 裸流数据中的信息来选择解码器&#xff0c;而是根据媒体封装层的信息来确定解码器。 媒体封装层…

理解TCP协议三次握手、四次挥手、流量控制、拥塞控制 、重传机制

&#x1f468;‍&#x1f4bb;个人主页&#xff1a; 才疏学浅的木子 &#x1f647;‍♂️ 本人也在学习阶段如若发现问题&#xff0c;请告知非常感谢 &#x1f647;‍♂️ &#x1f4d2; 本文来自专栏&#xff1a; 计算机网络 &#x1f308; 每日一语&#xff1a;真正的勇气是&…

Mac 常用软件汇总

开发工具 1、Android Studio Android开发工程师对这个玩意是又爱又狠&#xff0c;爱它的灵活自由&#xff0c;恨他的放纵不羁。 2、Sourcetree git 图形化操作工具。 3、IntelliJ IDEA 开发Java项目神器。 4、Serial 串口调试工具。可以打印一些日志信息。 5、Navicat …

Python与pycharm-----windows安装与运行

目录 1.python下载 2.Python安装 3、安装并配置pycharm 1.python下载 上python官网下载。很多计算机自带python&#xff0c;如果不自带的话&#xff0c;需要官网下载。 选好版本&#xff0c;最好为3.7版本的。 2.Python安装 需要记下安装路径&#xff0c;免得后续找不到&am…

【算法系列】非线性最小二乘求解-梯度下降法

系列文章目录 【算法系列】卡尔曼滤波算法 【算法系列】非线性最小二乘求解-直接求解法 【算法系列】非线性最小二乘求解-梯度下降法 【算法系列】非线性最小二乘-高斯牛顿法 文章目录 系列文章 文章目录 前言 一、梯度下降法&#xff08;GD&#xff09; 二、最速下…

深度优先与宽度优先搜索(python)

算法原理 1、宽度优先搜索&#xff1a; 宽度优先搜索算法(Breadth First Search&#xff0c;BSF)&#xff0c;思想是&#xff1a; 从图中某顶点v出发&#xff0c;首先访问顶点v在访问了v之后依次从左往右访问v的各个未曾访问过的邻接点&#xff1b;然后分别从这些邻接点出发依…

loT行业生死竞速:Aqara绿米得用户得天下

作者 | 曾响铃 文 | 响铃说 日前&#xff0c;社科院发布了一份“2022年秋季中国宏观经济形势分析”报告&#xff0c;报告中指出当前&#xff0c;世界经济增长预期下挫&#xff0c;全球通胀居高不下&#xff0c;而中国经济整体仍呈持续恢复状态&#xff0c;但经济内增长动能仍…

【数据结构】树和二叉树以及经典例题

目录1.树的基本概念1.1 树的特点1.2 树的一些相关概念1.3 树的表示1.3.1 那种结构表示树最优&#xff1f;&#xff08;不是二叉树&#xff0c;就是普通的树&#xff09;1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09;2. 二叉树&#xff08;重点&#x…

嵌入式linux实现pppoe拨号上网

make menuconfig -> Device Drivers -> Network device support -> PPP (point-to-point protocol) 中&#xff0c;选中所有ppp选项。退出&#xff0c;保存配置&#xff0c;修改Makefile重新执行make zImage. 将arch/mips/boot/下的zImage下载到开发板上重启系统。 t…

oracle数据库的导入与导出

1、oracle数据库导入与导出需要注意 2、导出数据格式介绍 3、 传统方式exp(导出&#xff09;和&#xff08;imp&#xff09;导入 3.1 命令执行方式 3.2 命令格式 3.3 导出数据 3.3.1示例 3.4 导入数据 3.4.1 导入数据 4 使用PL/SQL Developer 实现数据导入与导出 4.1 导出与导…

文本分类微调技巧实战2.0

讯飞比赛答辩结束&#xff0c;笔者和小伙伴们参加了一些讯飞的比赛&#xff0c;今年讯飞文本分类比赛相比去年更加多元化&#xff0c;涉及领域、任务和数据呈现多样性&#xff0c;听完各位大佬的答辩之后&#xff0c;结合之前经验和以下赛题总结下文本分类比赛的实战思路。 1 …

allegro16.6导出版图到ADS2019仿真的方法

首先配置好allegro软件 1. 选择FILE->Script, 弹出窗口后选择Browse &#xff0c; 选择ADS对应文件夹下\Keysight\ADS2019\ial\scripts的描述文件&#xff0c;并勾选Change Directory 点击确认&#xff1b; 2.回到Scripting界面点击Replay &#xff1b; 在弹出的窗口红框位…

Au NPs/FA/PAMAM-DOX 金纳米粒子/叶酸/聚酰胺-胺型树枝状高分子修饰阿霉素的研究

下面小编要分享给大家的内容是Au NPs/FA/PAMAM-DOX 金纳米粒子/叶酸/聚酰胺-胺型树枝状高分子修饰阿霉素&#xff0c;和小编一起来看&#xff01; PAMAM-DOX 聚酰胺-胺型树枝状高分子修饰阿霉素制备方法&#xff1a; 采用逆向蒸发结合pH梯度法制备LLDs-PAMAM-DOX,观察形态,测定…

基于SpringBoot的体育场运营系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;采用HTML和Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Mav…

【QT知识】在widget中的绘制事件函数

在widget中的绘制事件函数 文章目录1. 代码实现头文件部分cpp文件部分2. 事件函数参考博客&#x1f60a;点此到文末惊喜↩︎ 1. 代码实现 头文件部分 #include <QWidget> #include <QPainter>namespace Ui { class widget_2_1; }class widget_2_1 : public QWid…

相控阵天线(四):阵列天线波束赋形(遗传算法、粒子群算法、进化差分算法)

目录波束赋形简介遗传算法波束赋形粒子群算法波束赋形差分进化算法波束赋形智能算法比较遗传算法波束赋形代码示例波束赋形简介 根据期望的方向图辐射特性(如方向图形状、主瓣宽度、副瓣电平、方向性系数)并以某种方法求得阵面电流分布并将此电流分布施加于相应通道中&#xf…

CCF CTO Club 16期活动记事——走进腾讯,实现连接

11月17日&#xff0c;有幸通过CCF CTO Club活动报名&#xff0c;参观了腾讯北京的总部&#xff0c;在腾讯总部大楼7层宴会厅尝到了美食&#xff0c;还参加了“云原生技术的探索与实践”专场讲座和讨论&#xff0c;味蕾和思维获得了双丰收。 参观腾讯总部 这次参观腾讯北京总部…