Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具

前言

  本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率。至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好。我个人是比较推荐使用命令行的,因为命令行是原生的客户端,当熟悉了命令行以后,使用效率并不会比GUI低。而且我是从GUI(Tortoise SVN)转命令行的,刚开始的时候也是吐槽命令行的“非人性化”,但我走出了舒适区,真正使用起命令行后,我才发现了自己之前的想法是肤浅的。

 

指令别名

  指令别名就是给一些常用的指令设置一个较短的指令别名来提高Git的使用效率。

  如git st(git status):

  

  

  使用指令别名,并不会把原指令覆盖掉,而是同时生效:

  

 

  指令别名输错的时候,也会有提示:

  

 

  我在这里会分享我设置的指令别名,希望能帮助提高使用效率。

  1. 查看状态(Show the working tree status) - git status

git st

  

 

  2. 提交(Record changes to the repository) - git commit

git ci

  

 

  3. 分支操作(List, create, or delete branches) - git branch

git br

   

 

  4. 签出(Switch branches or restore working tree files) - git checkout

git co

  签出分支:

  

 

   签出(还原)工作区文件:

  

 

  签出(还原)工作区所有文件:

  

 

  5.差异(Show changes between commits, commit and working tree, etc) - git diff

  工作区(working driectory)与暂存区(staging area)的差异:

git df

  单个文件差异:

  

 

  所有文件差异:

  

 

  暂存区(staging area)与本地仓库(repository)的差异:

git dfs

   单个文件差异:

  

 

  多个文件差异:

  

 

  6.合并(Join two or more development histories together) - git merge

git mr

  

 

  7.日志(Show commit logs) - git log

   查看最近一条日志:

git last

  

  

  查看日志及分支提交信息:

git ls

  

 

  其中绿色的表示local分支,红色的的表示host分支,从上图可以看出,local的master分支、host的master分支、host的dev分支都处于同一个提交,local的dev分支领先于前面提到的3个分支。当版本显示不全提交时,可以按回车(回车)继续加载提交,需要退出是,按字母q。另外,你可以加“-n”指定查看前n条记录:

  

 

  查看日志、分支提交信息、提交人、提交时间:

git lg

   

 

  当版本显示不全提交时,可以按回车(回车)继续加载提交,需要退出是,按字母q。另外,你可以加“-n”指定查看前n条记录:

  

 

  8.变基(Reapply commits on top of another base tip) - git rebase

git rb

  

 

  我理解的rebase和merge功能上比较类似,只是rebase操作后,提交基本都会在一条线上,而merge会从一条线合到到另外一条线。

  Merge:

  

  

  Rebase:

  

 

  9.拣选(Apply the changes introduced by some existing commits) - git cherry-pick 

git cb

   

  

  从图中看看出,cherry-pick是把某个提交复制过来作为一个新的提交,和merge或者rebase的效果不同,check pick后可以进行merge或rebase操作:

  

 

使用Beyond Compare作为差异比较工具

  命令行自带的文件差异比较工具功能比较简单,用来查看或对比文件差异时,可能效果不太好,特别是在解决冲突的时候,但是我们可以集成一些比较强大的差异比较工具,比如本文提到的Beyond Compare。那么,我们先看一下例子:

 

  自带的差异比较效果:

  

 

  使用difftool指令调用Beyond Compare的比较效果:

  

  

   

  当然difftool也可以使用指令别名:

  

  

  解决合并冲突:

  我们在dev的a.txt文件中添加“dev”内容,在master分支上添加“master”内容,然后用master分支合并dev。

  

  

  使用mergetool指令调用Beyond Compare合并冲突:

  

  

 

  由上图可以看出,左边是当前分支的版本,右边的是需要合并的分支的版本,中间的是相同部分的版本,处理冲突的策略大概有以下几种:

  #1 当前分支版本替换合并分支版本,点击绿色的箭头。

  #2 合并分支版本替换当前分支版本,点击粉色的箭头。

  #3 同时需要两个版本的内容,点击绿色或粉色的箭头,然后把另外的分支的内容拷贝到下方的文本编辑框。

  #4 只要相同部分的内容,什么都不干。

  #5 其他。

  

  最后,点击红色的感叹号,表示已解决冲突。我这里选择#3的策略:

  

   

  关闭Beyond Compare,完成合并操作。

   

 

如何配置

  .gitconfig是配置的主要文件,它一般在C:\Users\{用户名}目录中,如果没有,可以通过以下两步创建:

  #1 打开命令行工具

  

  

  #2 执行设置用户名或者设置邮箱的指令。

  设置用户名:

git config --global user.name "{your username}"

  

  设置邮箱:

git config --global user.email "{your email}"

  

  打开.gitconfig文件,把以下内容拷贝到文件中,完成指令别名的配置:

  [alias]
  st = status
  ci = commit
  co = checkout
  br = branch
  df = diff
  dft = difftool
  dfs = diff --staged
  dfts = difftool --staged
  mr = merge
  mrt = mergetool
  last = log -1 HEAD
  ls = log --oneline --graph --all --decorate
  lg = log --oneline --graph --all --decorate --pretty=format:"%h%x20%Cgreen%d%x20%Cred%an%x20%C(yellow)%ad%x20%Creset%s" --full-history --date=short
  rb = rebase -i
  cp = cherry-pick

 

  打开.gitconfig文件,把以下内容拷贝到文件中,完成Beyond Compare的配置:

  [diff]
  tool = bc4
  [difftool]
  prompt = true
  [difftool "bc4"]
  cmd = \"D:/Program Files/Beyond Compare 4/bcomp.exe\" "$(cygpath -w $LOCAL)" "$REMOTE"
  [merge]
  tool = bc4
  [mergetool]
  prompt = true
  [mergetool "bc4"]
  #trustExitCode = true
  cmd = \"D:/Program Files/Beyond Compare 4/bcomp.exe\" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"

 

  最终效果如图所示:

  

 

最后

  希望以上分享的小技巧可以提高大家的效率,大家也可以根据自己的需要去设置指令别名,欢迎大家讨论及分享指令别名的使用心得。

转载于:https://www.cnblogs.com/Erik_Xu/p/5655525.html

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

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

相关文章

java cache-control_详解浏览器Cache-Control缓存策略

原来用的是 Expires 策略,浏览器可以直接从浏览器缓存读取数据,而无需再次请求,它的值对应一个 GMT,来告诉浏览器资源缓存过期时间,如果还没过该时间点则不发请求。例如下面的例子,这是京东的首页里找的一个,时间都干到 2027 年了…

前端路由和后台路由有什么区别?

区别在于express是服务器端的路由,也就是说需要向后台服务器发送请求,然后服务器来决定来render那个.html,这也就是最早的mvc架构模式,而前端的路由是将这一过程放在浏览器端,也就是前台写js代码控制,不在请…

java 反编译 报错_java反编译后再编译成class时提示缺少包

问题描述我下载了一个对方的Jar程序,可以正常运行,但是我想修改程序里面的一些内容,比如其程序中有一个函数public void setNumTarget(final long numTarget) {this.numTarget numTarget;}我想让其变成类似这样的(当然这只是其中一处想要修改的地方,还有几处稍微复杂点的)publ…

freeCodeCamp:Diff Two Arrays

比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素。换言之,返回两个数组的差异。 function diff(arr1, arr2) {var newArr [];var newarr1 arr1.filter(function(item){ return arr2.indexOf(item) -1;})…

java多线程并行执行命令_深入理解Java多线程与并发框(第④篇)——重排序、屏障指令、as-if-serial规则...

![](http://img.blog.itpub.net/blog/2020/03/24/906435fda570a5e3.png?x-oss-processstyle/bb)# 一、重排序前篇文章已经讲了Java内存模型和与其三个特性:原子性、可见性、有序性。但事实上,为了提升程序的执行性能,编译器 和 处理器 常常会…

前端必备切图ps篇

前言:当设计师通过photoshop工具设计完设计稿导出psd文件时,我们前端工程师该如何进行切图转换成网页的所需的图片呢,接下来讲讲如何利用photoshop工具快速简洁的切图,因为ps工具用到的行业很多,涉及到的各个行业&…

jquery ajax mysql登录_ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库...

1.ajax的基础知识ajax是结合了jquery、php等几种技术延伸出来的综合运用的技术,不是新的内容。ajax也是写在如果使用ajax一定是要有1个处理页面的,处理页面只是操作数据库并且返回值,页面都是ajax处理的。ajax的写法:test.php1 2 …

jenkins配置记录(2)--代码发布流程

在我们的日常运维工作中,使用jenkins来完成业务代码发版上线是至关重要的一环。前面已经提到在jenkins上添加用户权限的操作,今天重点说下如何在jenkins下构建项目工程进行代码发布? 在此简单介绍下jenkins进行代码发布的流程(根据…

ril.java_RIL.java里request流程

Android GSM驱动模块(rild)详细分析(二)request流程熊猫哥哥 发表于IT168和Opendroid 转载请注明1. 多路复用I/O机制的运转上文说到request是接收,是通过ril_event_loop中的多路复用I/O,也对初始化做了分析.现在我们来仔细看看这个机制如何运转.ril_event_set负责配置一个event…

hibernate优化笔记(随时更新)

一:优化配置 1.关联映射的配置:对照之前的博客,如:inverse属性的设置(减少对同一对象的多条update语句):在one端设置为true,只会执行一次update语句 2.级联cascade属性设置:全部或部分设置为级联 如设置为sava-update(级联更新),当进行保存或更新时,会级联保存所有的关联映射的…

oracle 布尔转换java布尔_java 布尔值一种赋值方法

解决在配置Oracle数据库连接错误问题项目开发使用的Oracle,但是使用了不同的版本的Oracle数据库.然后自己在电脑上安装了2个连接客户端,版本分别是: 10.2.0 12.1.0 用Toad for Oracle 9.0的时候,我 ...XSS跨站脚本小结XSS漏洞验证经常遇到一些过滤,如何进行有效验证和绕过过滤呢…

ASP.NET Request.UrlReferrer 问题

ASP.NET Request.UrlReferrer 作用: 官网解释:Gets information about the URL of the clients previous request that linked to the current URL. 获取 到达当前页面之前的URL信息 此Request.UrlReferrer 容易为null, 当第一次打开当前页面…

联合查询(查找所有分类及其父类)

//查找所有分类及其父类SELECT s.type_id, s.type_name, p.type_name FROM 表1 AS s LEFT JOIN 表2 AS p ON s.parent_id p.type_id; 转载于:https://www.cnblogs.com/dengyg200891/p/6030484.html

autoitv3点击windows界面

在自动化测试过程中会遇到如下windows安全认证,需要输入账号和密码,这个认证对话框不属于element元素。无法用selenium操作,需要用autoitv3操作,输入账号密码后,再进行web元素操作。 有2中方式: 第一种&…

java ftp上传文件_jaVA使用FTP上传下载文件的问题

为了实现 FTP上传下载,大概试了两个方法sun.net.ftp.FtpClientorg.apache.commons.net一开始使用sun.net.ftp.FtpClient,结果发现唯一的问题是它不可以创建目录,随后试了下org.apache.commons.net,创建目录倒是没有问题,不过用FTPClient 的storeFile方法存储文件的时候发现文本…

【转载】linux环境下tcpdump源代码分析

linux环境下tcpdump源代码分析 原文时间 2013-10-11 13:13:02 CSDN博客原文链接 http://blog.csdn.net/han_dawei/article/details/12615199主题 Tcpdump 源码分析作者:韩大卫 吉林师范大学tcpdump.c 是tcpdump 工具的main.c, 本文旨对tcpdump的框架有简单了解&a…

java 扩展接口_详解常用的Spring Bean扩展接口

前言Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心。Spring框架运用了非常多的设计模式,从整体上看,它的设计严格遵循了OCP----开闭原则,即:1、保…

会话控制(session、cookie)

1.session(1)session存储在服务器的(2)session每个人存一份(3)session有默认的过期时间(4)session里面可以存储任意类型的数据安全,对服务造成压力用法:1.当一个页面需要使用session的时候,需要在页面顶部加session_start();2.操作session 赋…

java 批量提交_【INSERT】逐行提交、批量提交及极限提速方法

在Oracle数据库中,不是提交越频繁越好。恰恰相反,批量提交可以得到更好的性能。这篇文章给大家简单展示一下在Oracle数据库中逐行提交于批量提交两者之间的性能差别。最后再给出一种可以极大改变性能的方法。1.创建表t_ref,并初始化880992条数…

自动化测试索引

转自:http://www.cnblogs.com/zhangfei/p/5454682.html 自动化测试全聚合 UI自动化测试:1.基础API:http://www.cnblogs.com/zhangfei/p/3158223.html2.数据驱动:http://www.cnblogs.com/zhangfei/p/5390091.htmlhttp://www.cnblog…