2.git进阶篇总结
进阶 1 - HEAD、master 与 branch:
介绍了 Git 中的一些「引用」:HEAD、master、branch。这里总结一下:
HEAD是指向当前commit的引用,它具有唯一性,每个仓库中只有一个 HEAD。在每次提交时它都会自动向前移动到最新的commit。branch是一类引用。HEAD除了直接指向commit,也可以通过指向某个branch来间接指向commit。当HEAD指向一个branch时,commit发生时,HEAD会带着它所指向的branch一起移动。master是 Git 中的默认branch,它和其它branch的区别在于:- 新建的仓库中的第一个
commit会被master自动指向; - 在
git clone时,会自动checkout出master。
- 新建的仓库中的第一个
branch的创建、切换和删除:- 创建
branch的方式是git branch 名称或git checkout -b 名称(创建后自动切换); - 切换的方式是
git checkout 名称; - 删除的方式是
git branch -d 名称。 - 删除其他机器上的远程分支和本地分支。
git fetch -p和git branch -a
- 创建
进阶 2 - push 的本质:
介绍了 push 这个指令的本质。总结一下关键点:
push是把当前的分支上传到远程仓库,并把这个branch的路径上的所有commits 也一并上传。push的时候,如果当前分支是一个本地创建的分支,需要指定远程仓库名和分支名,用git push origin branch_name的格式(等同于git push origin feature1:feature1本地分支名和远程的不必相等),而不能只用git push;或者可以通过git config修改push.default来改变push时的行为逻辑。push的时候之后上传当前分支,并不会上传HEAD;远程仓库的HEAD是永远指向默认分支(即master)的。
进阶 3 - merge:合并 commits:
对 merge 进行了介绍,内容大概有这么几点:
merge的含义:从两个commit「分叉」的位置起,把目标commit的内容应用到当前commit(HEAD所指向的commit),并生成一个新的commit;merge的适用场景:- 单独开发的
branch用完了以后,合并回原先的branch; git pull的内部自动操作。
- 单独开发的
merge的三种特殊情况:- 冲突
- 原因:当前分支和目标分支修改了同一部分内容,Git 无法确定应该怎样合并;
- 应对方法:解决冲突后手动
commit。 - 放弃解决冲突,取消
merge。未commit前git merge --abort
HEAD领先于目标commit:Git 什么也不做,空操作;HEAD落后于目标commit:fast-forward。(相当于pull)
- 冲突
进阶 4 - Feature Branching:最流行的工作流:
介绍了 Feature Branching 这种工作流。它的概念很简单:
- 每个新功能都新建一个
branch来写;- 基于远程master分支切出一个新分支
- 分别
git checkout master,git checkout -b new_feature - 简洁操作
git checkout -b new_feature origin/master
- 分别
- 基于远程master分支切出一个新分支
- 写完以后,把代码分享给同事看;写的过程中,也可以分享给同事讨论。另外,借助 GitHub 等服务提供方的 Pull Request 功能,可以让代码分享变得更加方便;
- 分支确定可以合并后,把分支合并到
master,并删除分支。- 删除本地分支
git branch -d feature - 删除远程分支
git push origin -d feature# 用-d参数把远程仓库的branch也删了
- 删除本地分支
这种工作流由于功能强大,而且概念和使用方式都很简单,所以很受欢迎。再加上 GitHub 等平台提供了 Pull Request 的支持,目前这种工作流是商业项目开发中最为流行的工作流。
进阶 5 - 关于 add:
通过 add 来把改动的内容放进暂存区
add后面加个点 ".":全部暂存add添加的是文件改动,而不是文件名
进阶 5 - 看看我都改了什么:
介绍了一些查看改动内容的方法,大致有这么几类:
- 查看历史中的多个
commit:log- 查看详细改动:
git log -p - 查看大致改动:
git log --stat
- 查看详细改动:
- 查看具体某个
commit:show- 要看最新 commit
,直接输入git show ;要看指定commit,输入git show commit的引用或SHA-1 - 如果还要指定文件,在
git show的最后加上文件名
- 要看最新 commit
- 查看未提交的内容:
diff- 查看工作目录和暂存区的区别:
git diff不加选项参数 - 查看工作目录和上一条
commit的区别:git diff HEAD - 查看暂存区和上一条
commit的区别:git diff --staged(或--cached)
- 查看工作目录和暂存区的区别:
2.git进阶篇总结的更多相关文章
- git 进阶篇
在git使用时,有时需要在公司内部搭建自己的git服务器,用于内部的版本控制. 从远程服务器到本地 先创建服务器端的空git库,将其clone到本地,再将本地的修改push到服务器端 # step1: ...
- Sass进阶之路,之二(进阶篇)
Sass之二(进阶篇) 1. 数据类型 1.1 Number 数字类型,小数类型,带有像素单位的数字类型,全部都属于Number类型 Number类型详情请点击这里,下面是小例子 1.$n1: 1.2 ...
- Vue进阶篇
前引 今天是2018年12月30,虽不是2018年的最后一天,但是却是自己在2018年写的最后一篇博客了,昨天下班在地铁上闲来无事,翻起了关注的一些公众号发的技术博文,里面就提到写博客的重要性,其实这 ...
- PowerShell攻防进阶篇:nishang工具用法详解
PowerShell攻防进阶篇:nishang工具用法详解 导语:nishang,PowerShell下并肩Empire,Powersploit的神器. 开始之前,先放出个下载地址! 下载地址:htt ...
- CocoaPods详解之(二)----进阶篇
CocoaPods详解之----进阶篇 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/19178709 转载请注明出处 ...
- Git进阶:常用命令和问题案例整理
一.前言 整理常用git命令和以及在实际使用的过程中碰到的问题案例,旨在git进阶,提升工作开发效率,有需要补充的小伙伴欢迎下方留言,本篇持续更新中... 二.命令 配置用户名和邮箱 git conf ...
- 2. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml
目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...
- labview从入门到出家5(进阶篇)--程序调试以及labview函数库的运用
跟了前面几章的操作流程,相信大家对labview有了一定的认识.其实只要了解了labview的编程思路,再熟悉地运用各个变量,函数以及属性,那么我们就可以打开labview的大门了.跟其他编程语言一样 ...
- Membership三步曲之进阶篇 - 深入剖析Provider Model
Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...
随机推荐
- 解决myeclipse中struts2 bug问题包的替换问题
由于struts2的bug问题,手工替换还是比較麻烦.但即便是最新的myeclipse2014也没有替换最新的struts2包,研究了一天,最终找到了解决的方法.下面就解决方法与大家分享一下. 1.在 ...
- HDU1171_Big Event in HDU【01背包】
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- Algorithmic Crush
evendra在9号云上看到了他的教练朝他微笑. 每次教授选出Devendra单独问他一个问题,Devendra朦胧的头脑里全是他的教练和她的微笑,以至于他无法专注于其他事情.帮助他解决这个问题: 给 ...
- iOS-获取子视图父控制器
开发中有的时候需要涉及当前视图的父级视图,可以通过UIResponder来获取,有两种实现方式: UIView *next=sender; while ([next superview]) { nex ...
- 64. Extjs中grid 的ColumnModel 属性配置
转自:https://blog.csdn.net/u011530389/article/details/45821945 本文导读:Ext.grid.ColumnModel 该类用于定义表格的列模型, ...
- PCB MS SQL SERVER 字段含小写字母更新为大写字母
今天在预审完成时报如下错误,此错误原因是由于SQL Server数据字段存在小写,而Oracle数据库需大写导致的, 怎么解决这个问题了,非常简单 .这里将SQL贴出来 . 1.将生产型号中含有小写字 ...
- 0619-dedeCMS的安装、重装、目录说明、基本操作及注意事项
一.安装步骤: 1.解压文件,将我们需要的uploads文件夹更名为dedeCMS 2.从站点下打开dedeCMS-install-index.php开始安装 3.安装完成后到php.ini中设置re ...
- poj1006生理周期(中国剩余定理)
生理周期 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 139224 Accepted: 44687 Descripti ...
- [Swift通天遁地]九、拔剑吧-(14)创建更美观的景深视差滚动效果
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- robotframework - 运行报错提示 No keyword with name 'Open Browser' found.
用下面的例子为例: 1.输入以上robot脚本提示: 2.经查阅资料,大部分都使用的是selenium2 版本,无法解该的问题,目前小编使用的是selenium3,不知道selenium是哪个版本的话 ...