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 年了…

前端必备切图ps篇

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

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

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

autoitv3点击windows界面

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

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

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

c盘java文件误删_C盘爆满怎么办,教你有选择性删除文件,恢复空间

有很多朋友说电脑c盘有很多垃圾,占着空间,还导致电脑响应变慢。还不知道能不能删除,很困扰。那么c盘文件都是什么文件呢?哪些能删除,做一次全面的清理呢?下面给大家介绍一下program Date:系统文…

java向另一activity输入_Activity经典实例一:两个Activity传递数据和对象

1、概述:Activity类直接或者间接地继承了Context、ContextWrapper、ContextThemeWrapper等基类,因此Activity可以直接调用它们的方法。创建一个Activity需要实现某些方法,常见的是实现onCreate(Bundle status)方法,该方法将会在Ac…

深入理解JSON对象

深入理解JSON对象 前面的话 json(javascript object notation)全称是javascript对象表示法,它是一种数据交换的文本格式,而不是一种编程语言,用于读取结构化数据。2001年由Douglas Crockford提出,目的是取代繁琐笨重的XML格式。本…

java内存分配模型优点_高并发实战(二)-并发基础 缓存 MESI 内存模型

左图为高速缓存 右图为多级缓存数据的读取和存储都经过高速缓存,CPU核心与高速缓存有一条特殊的快速通道。主存与高速缓存都是连接在系统总线上,当然其他组件也是在此基础上进行通信的。在高速缓存出现后不久,系统变得愈加复杂,高…

CentOS 7 安装SVN服务端

CentOS7下安装SVN服务 1. yum命令即可方便的完成安装# sudo yum install subversion 测试安装是否成功:# svnserve --version 更改svn的默认配置(更改默认的指向目录和默认端口)# sudo vim /etc/sysconfig/svnserve编辑示例:OPTIONS"-r /data/svn -…

.NET简谈事务、分布式事务处理

在本人的 “ .NET简谈事务本质论”一文中我们从整体上了解了事务模型,在我们脑子里能有一个全局的事务处理结构,消除对数据库事务的依赖理解,重新认识事务编程模型。 今天这篇文章我们将使用.NET C#来进行事务性编程,从浅显、简单…

css compressor java_利用YUI Compressor压缩JS/CSS之终极秘籍

JS/CSS的压缩已经不是什么新鲜话题了,自打YSlow推出后,这方面的优化话题是铺天盖地啊;不过当时作为后知后觉的我,甚至都没法完整地写出一份漂亮的JS/CSS的代码,何尝会去注意呢?!时至今日&#x…

HTML 列表中的dl,dt,dd,ul,li,ol区别及应用

HTML 列表中的dl,dt,dd,ul,li,ol区别及应用 HTML 列表中的dl,dt,dd,ul,li,ol区别及应用 工具/原料 html&#xff0c;dw软件方法/步骤 1无序列表 无序列表是一个项目的列表&#xff0c;此列项目使用粗体圆点&#xff08;典型的小黑圆圈&#xff09;进行标记。 无序列表始于 <…

自然语言10_分类与标注

sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare http://www.tuicool.com/articles/feAfi2 NLTK读书笔记 — …

git中Please enter a commit message to explain why this merge is necessary.

Please enter a commit message to explain why this merge is necessary. 请输入提交消息来解释为什么这种合并是必要的 git 在pull或者合并分支的时候有时会遇到这个界面。可以不管(直接下面3,4步)&#xff0c;如果要输入解释的话就需要: 1.按键盘字母 i 进入insert模式 2.修…

abp框架mysql连接配置,abp框架连接数据库

ABP框架搭建项目系列教程基础版完结篇经过前面十二篇的基础教程&#xff0c;现在终于该做个总结了。回顾第一篇&#xff0c;我们建议新手朋友们先通过ABP官网的启动模板生成解决方案&#xff0c;因为这样既快速又准确&#xff0c;不会因为项目的搭建&#xff0c;而让新手畏而却…

【分布式】Zookeeper在大型分布式系统中的应用

一、前言 上一篇博文讲解了Zookeeper的典型应用场景&#xff0c;在大数据时代&#xff0c;各种分布式系统层出不穷&#xff0c;其中&#xff0c;有很多系统都直接或间接使用了Zookeeper&#xff0c;用来解决诸如配置管理、分布式通知/协调、集群管理和Master选举等一系列分布式…

Egret资源管理解决方案

关于egret开发H5页游&#xff0c;资源管理和加载的一点看法。 一 多json文件管理 二 资源归类和命名 三 exml文件编写规范 四 资源预加载、分步加载、偷载 五 资源文件group分组 六 ResUtils&#xff0c;多json文件管理类 七 ResUtils&#xff0c;资源组加载管理类 八 开发中遇…

java 等待唤醒机制,Java线程等待唤醒机制

记录面试过程中被问到的几个需要手写代码的小案例1.请手写出线程的等待唤醒机制案例中两个线程&#xff1a;SyncSetThread设置学生信息&#xff0c;SyncGetThread用来获取学生信息&#xff0c;在Student实体中提供一个标记属性flag&#xff0c;记录当前是否有数据。等待唤醒机制…

Xshell实现Windows上传文件到Linux主机

经常有这样的需求&#xff0c;我们在Windows下载的软件包&#xff0c;如何上传到远程Linux主机上&#xff1f;还有如何从Linux主机下载软件包到Windows下&#xff1b;之前我的做法现在看来好笨好繁琐&#xff0c;不过也达到了目的&#xff0c;笨人有本方法嘛&#xff1b; 我是怎…