「转」CS可视化:有用的Git命令 可视化css工具
liebian365 2024-10-18 09:35 4 浏览 0 评论
- 原文地址:https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1
- 原文作者:Lydia Hallie
- 译文地址:[译]CS可视化:有用的Git命令 - 知乎
尽管Git是一个非常强力的工具,但如果我说这也可能是一场噩梦 ,我想大多数人也会同意。在使用Git的时候,我发现在我的大脑中想象发生了什么是非常有用的:在我执行特定命令的时候,分支之间是如何相互影响的,以及它会如何影响历史日志?当我在master分支做了硬重置(hard reset),强制推送(force push)到master分支并且rimraf .git目录之后,我的同事为什么会哭?
我认为为最常用和最有用的命令创建一些可视化的图例将会成为完美的使用示例! 我涉及到的许多命令拥有可选的参数,您可以使用这些参数来更改命令的行为。在示例中,我将会涉及没有添加(太多)配置项命令的默认行为!
Merging(合并)
拥有多个分支是极其方便的,它可以使新的更新彼此分离,也可以确保您不会意外地推送未经批准或破坏性更改的代码到生产环境。一旦更改被批准,我们便想在生产环境获得这些更改。
从一个分支获得另一个分支更改的一种方式是执行git merge命令。Git可以执行俩种类型的合并:
- fast-forward(快进式合并)
- non-fast-forward(非快进式合并)
现在说这些可能没有太大意义,我们先看一下它们之间的区别。
Fast-forward(--ff)
与我们正在合并的分支相比,当当前分支没有额外提交的时候,会发生fast-forward-merge。Git是懒惰的,它会首先尝试最简单的选项:fast-forward!这种类型的合并不会创建一个新的提交,而是在当前分支上合并我们正在合并分支上的提交 。
完美!我们现在在master分支上可以找到所有在dev分支上做出的更改。那么,non-fast-forward又是什么意思呢?
No-fast-forward(--no-ff)
相比于您想要合并的分支,当前分支没有任何额外的提交是极好的,但不幸的是那是很罕见的情况!如果在当前分支上提交的更改在我们想要合并的分支上不存在,Git将会执行一次no-fast-forward合并。
随着一次no-fast-forward合并,Git在活动分支(master)上创建一个新的合并提交。该提交的父提交同时指向活动分支和我们想要合并的分支(dev)。
没什么大不了的,一次完美的合并! master分支现在包含了所有我们在dev分支上做出的所有更改。
Merge Conflicts(合并冲突)
尽管Git擅长如何去合并分支以及向文件中添加更改,但是它不能总是依靠它自己来做出所有的决定 。当我们尝试合并的两个分支在同一个文件的同一行上有不同的更改,或者如果一个分支删除了一个在另一个分支被编辑过的文件等情况发生的时候,Git将不能自己决定该如何合并代码。
在这种情况下,Git将会询问您来帮助决定我们想要保留俩个选项中的哪一个。比如说在两个分支上,我们都编辑了README.MD中的第一行。
如果您想把dev合并到master,这将会导致合并冲突:您希望标题是Hello!还是Hey!?
在尝试合并分支的时候,Git将会为您显示冲突发生的位置。我们可以手动移除我们不想保留的更改,保存剩余的更改,再次添加文件到暂存区,然后提交所有更改的文件 。
好极了!尽管解决冲突十分烦人,但是它完全有意义:Git不应该只是假设我们想要保留哪些更改。
Rebasing
我们刚刚已经看过如何通过执行一个git merge命令,将来自于一个分支的更改应用到另一个分支。从一个分支添加更改到另一个分支的另一个方法是执行git rebase命令。
git rebase会从当前分支拷贝提交,并且将这些拷贝的提交放到指定分支的顶部。
完美,我们现在在dev分支上可以找到所有在master分支上做出的更改!
rebase和merge命令一个最大的不同是:Git不会尝试去找出哪些文件要保留,哪些文件不需要保留。我们正在rebase的分支总是拥有我们想要保留的最新更改!这种方式在之后合并过程中不会遇到任何冲突,并且可以保持一个很好的直线Git历史记录。
“ 译者注:这里指的不会遇到任何冲突的情况如下(还是以上图为例):
- dev$ git rebase master 将dev的提交拷贝一份复制到master的顶部
- dev$ git checkout master
- master$ git merge dev 此时master相当于没有做任何额外的提交,会进行fast-forward-merge,保持直线提交记录
这个例子展示了在master分支上进行rebase。然而在更大的项目中,通常不希望这样做。由于拷贝的提交创建了新的哈希值,所以git rebase改变了项目的历史记录。
无论何时您在一个特性分支上工作,并且master分支已经被更新,rebase都是一种很好的做法。您可以在自己的分支上获取到所有的更新,这将阻止未来的合并冲突!
交互式的 rebase
在rebase提交之前,我们可以编辑它们! 我们可以使用一个交互式的rebase来做这件事。交互式rebase对于您当前正在工作的分支以及想要修改的某些提交也是很有用处的。
在我们正在rebase的提交上有 6 个操作可以执行:
- reword: 更改提交信息
- edit: 修改这次提交
- squash: 合并提交到之前的提交,会用新的提交信息覆盖之前的提交信息
- fixup: 合并提交到之前的提交,不保留当前修改提交的日志消息
- exec: 在我们想要rebase的每一个分支上运行一个命令
- drop: 移除一个提交
棒极了!通过这种方式,我们可以完全控制在分支上做出的提交。如果我们想要移除一个提交,我们只需要对它执行drop命令。
或者如果您想将多个提交压缩到一起来获得一个干净的历史记录,完全没有问题!
交互式rebase对于您正在尝试rebase的提交甚至是当前活动分支都给予了极大的控制权!
Resetting
这个命会在已经提交的更改在之后不想要的时候会被用到。可能它是一个还在工作进度中的半成品提交,或者可能提交引入了bug! 在这种情况,我们可以使用git reset命令。
git reset会删除当前暂存的所有文件,并且让我们控制HEAD应该指向的位置。
Soft reset
soft reset移动HEAD到指定的提交(或者提交相对于HEAD的索引),不会删除在提交之后引入的更改!
比如说我们不想保留添加了一个style.css文件的提交9478i,也不想保留添加了一个index.js文件的提交035cc。但是我们想要保留新添加的style.css和index.js文件!这是soft reset一个完美的使用示例。
当输入git status时,您将会发现我们仍然可以访问在之前的提交做出的所有更改。这很好,因为这意味着我们可以继续处理这些文件,并且在之后再次提交它们!
Hard reset
有些时候,我们不想保留通过特定分支引入的更改。不同于soft reset,我们不再需要访问这些不想被保留的更改。Git应该只是重置它的状态回到指定提交的位置:被重置的状态甚至包括您在工作目录以及暂存文件中做出的更改!
Git已经丢弃了在9e78i和035cc上引入的更改,并且重置它的状态到提交ec5be所在的位置
Reverting
撤销更改的另一个方式是执行git revert命令。通过恢复一个特定的提交,我们会创建一个包含被恢复更改的新提交!
比如说ec5be添加了一个index.js文件。之后,我们真正的意识到我们不再想要这次提交引入的更改!让我们恢复ec5be对应的提交。
完美!提交9e78i恢复了ec5be提交引入的更改。在不修改分支历史的情况下,为了撤销一次特定的提交,执行git revert命令是特别有用的。
Cherry-picking
当一个特定分支中包含的一个提交,需要在我们的活动分支上引入它的更改时,我们可以使用cherry-pick命令!对一次提交进行cherry-pick,我们会在活动分支上创建一个新的提交,该提交会包含被cherry-pick的提交引入的更改。
比如说在dev分支上的提交76d12为index.js文件添加了一个改动,我们在master分支上也想要拥有这次改动。我们不想要所有的提交,我们只关心这一个单独的提交!
很酷,master分支现在包含了76d12引入的更改!
Fetching
如果我们有一个远程Git分支,比如在GitHub上的一个分支,远程分支已经拥有了提交,但是当前分支却没有,这时会用到fetch命令!可能是另一个分支被合并到了远程分支,也可能是您的同事推送了一个快速修复等等情况。
通过在远程分支上执行git fetch命令,我们可以在本地获得这些更改!它不会以任何方式影响您的本地分支:fetch只是下载了新的数据。
现在我们可以看到从最后一次推送之后做出的所有更改!现在我们在本地拥有了新数据,我们可以决定想要用新数据做什么。
Pulling
尽管为了获取一个分支的远程信息,git fetch是及其有用的,但是我们也可以执行git pull命令。git pull实际上是将俩个命令合为了一个命令:git fetch + git merge。当我们从origin分支拉取更改的时候,首先会像执行git fetch命令一样fetch所有的数据,在这之后自动地将最新的更改合并到本地分支。
太好了,我们现在完美的同步了远程分支的数据,并且拥有了所有最新的更改!
Reflog
每个人都会犯错,这完全可以理解!有些时候您可能会感觉已经搞砸了您的Git仓库,以至于您特别想整个删掉它。
git reflog是一个非常有用的命令,目的是用来显示已经被采取的所有操作的日志!日志中包括merge,reset,rervert:基本上会显示任何对您分支做出更改的操作日志。
如果您不小心犯了一个错误,您可以轻易的基于reflog给我们提供的信息重置HEAD到之前的位置,然后重做我们之前做错的事情!
比如说实际上我们不想合并origin分支。当我们执行git reflog命令时,将会看到在合并之前仓库的状态是在HEAD@{1}。让我们执行git reset将HEAD指回到HEAD@{1}的位置!
我们可以看到最新的操作已经被推到了reflog中!
相关推荐
- 快递查询教程,批量查询物流,一键管理快递
-
作为商家,每天需要查询许许多多的快递单号,面对不同的快递公司,有没有简单一点的物流查询方法呢?小编的回答当然是有的,下面随小编一起来试试这个新技巧。需要哪些工具?安装一个快递批量查询高手快递单号怎么快...
- 一键自动查询所有快递的物流信息 支持圆通、韵达等多家快递
-
对于各位商家来说拥有一个好的快递软件,能够有效的提高自己的工作效率,在管理快递单号的时候都需要对单号进行表格整理,那怎么样能够快速的查询所有单号信息,并自动生成表格呢?1、其实方法很简单,我们不需要一...
- 快递查询单号查询,怎么查物流到哪了
-
输入单号怎么查快递到哪里去了呢?今天小编给大家分享一个新的技巧,它支持多家快递,一次能查询多个单号物流,还可对查询到的物流进行分析、筛选以及导出,下面一起来试试。需要哪些工具?安装一个快递批量查询高手...
- 3分钟查询物流,教你一键批量查询全部物流信息
-
很多朋友在问,如何在短时间内把单号的物流信息查询出来,查询完成后筛选已签收件、筛选未签收件,今天小编就分享一款物流查询神器,感兴趣的朋友接着往下看。第一步,运行【快递批量查询高手】在主界面中点击【添...
- 快递单号查询,一次性查询全部物流信息
-
现在各种快递的查询方式,各有各的好,各有各的劣,总的来说,还是有比较方便的。今天小编就给大家分享一个新的技巧,支持多家快递,一次能查询多个单号的物流,还能对查询到的物流进行分析、筛选以及导出,下面一起...
- 快递查询工具,批量查询多个快递快递单号的物流状态、签收时间
-
最近有朋友在问,怎么快速查询单号的物流信息呢?除了官网,还有没有更简单的方法呢?小编的回答当然是有的,下面一起来看看。需要哪些工具?安装一个快递批量查询高手多个京东的快递单号怎么快速查询?进入快递批量...
- 快递查询软件,自动识别查询快递单号查询方法
-
当你拥有多个快递单号的时候,该如何快速查询物流信息?比如单号没有快递公司时,又该如何自动识别再去查询呢?不知道如何操作的宝贝们,下面随小编一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号若干...
- 教你怎样查询快递查询单号并保存物流信息
-
商家发货,快递揽收后,一般会直接手动复制到官网上一个个查询物流,那么久而久之,就会觉得查询变得特别繁琐,今天小编给大家分享一个新的技巧,下面一起来试试。教程之前,我们来预览一下用快递批量查询高手...
- 简单几步骤查询所有快递物流信息
-
在高峰期订单量大的时候,可能需要一双手当十双手去查询快递物流,但是由于逐一去查询,效率极低,追踪困难。那么今天小编给大家分享一个新的技巧,一次能查询多个快递单号的物流,下面一起来学习一下,希望能给大家...
- 物流单号查询,如何查询快递信息,按最后更新时间搜索需要的单号
-
最近有很多朋友在问,如何通过快递单号查询物流信息,并按最后更新时间搜索出需要的单号呢?下面随小编一起来试试吧。需要哪些工具?安装一个快递批量查询高手快递单号若干怎么快速查询?运行【快递批量查询高手】...
- 连续保存新单号功能解析,导入单号查询并自动识别批量查快递信息
-
快递查询已经成为我们日常生活中不可或缺的一部分。然而,面对海量的快递单号,如何高效、准确地查询每一个快递的物流信息,成为了许多人头疼的问题。幸运的是,随着科技的进步,一款名为“快递批量查询高手”的软件...
- 快递查询教程,快递单号查询,筛选更新量为1的单号
-
最近有很多朋友在问,怎么快速查询快递单号的物流,并筛选出更新量为1的单号呢?今天小编给大家分享一个新方法,一起来试试吧。需要哪些工具?安装一个快递批量查询高手多个快递单号怎么快速查询?运行【快递批量查...
- 掌握批量查询快递动态的技巧,一键查找无信息记录的两种方法解析
-
在快节奏的商业环境中,高效的物流查询是确保业务顺畅运行的关键。作为快递查询达人,我深知时间的宝贵,因此,今天我将向大家介绍一款强大的工具——快递批量查询高手软件。这款软件能够帮助你批量查询快递动态,一...
- 从复杂到简单的单号查询,一键清除单号中的符号并批量查快递信息
-
在繁忙的商务与日常生活中,快递查询已成为不可或缺的一环。然而,面对海量的单号,逐一查询不仅耗时费力,还容易出错。现在,有了快递批量查询高手软件,一切变得简单明了。只需一键,即可搞定单号查询,一键处理单...
- 物流单号查询,在哪里查询快递
-
如果在快递单号多的情况,你还在一个个复制粘贴到官网上手动查询,是一件非常麻烦的事情。于是乎今天小编给大家分享一个新的技巧,下面一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号怎么快速查询?...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)