前言:一般公司git的master主干与线上代码保持一致,在使用git的时候,偶尔会发生一些莫名其妙的事情,很容易导致运营事故。so~ 总结一下经常使用的git命令以及git的一些小坑,方便日后查阅
 
日常开发中Git的一般使用步骤:
1. 位于master分支下,先同步为最新代码
 
2. 创建并切换到新的本地分支下处理新特性abc
 
3. 新特性abc处理完成,假设需要交接给同事b处理,那么推送本地分支为远程分支.
如果你时间紧急,可以直接使用下面的命令
【小技巧:分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。】
 

如果你有时间,可以看一下下面的坑出没
1.git add . or [git add -A] 这2个命令的作用是什么? 【注意:这2个命令在git版本不同的时候,作用不同】
在git 1.x 的时候,git add . 只会提交有修改的文件和新增的文件,git add -A 会提交所有修改的文件(包括被删除的文件)

在git 2.x 的时候,git add . 和git add -A 作用相同, 会提交所有修改的文件(包括被删除的文件)

也就是说,假如你的git版本是在1.x的时候,git add . 命令不会提交已删除的文件,在git 2.x 的时候,这2个命令都是提交被修改了的文件。
【友好提示:如果你当前git版本低于2.0,赶紧升级到2.0以上吧】
 
2. 推送本地分支到远程服务器,使用git push 是什么效果?
如果你不了解下面的配置,后续直接在分支上直接使用 git push 是一个风险很高的行为。
git版本的不同,或者被改变了git的全局配置config文件里面的push.default属性的时候,会使git push操作的默认行为不同 - 查看自己当前git版本的配置,在命令行中输入
可以看到push.default属性 在git 2.0之前,这个属性的默认被设为'matching',2.0之后则被更改为了'simple'。【看到这里,赶紧升级到git2以上版本吧】
push.default 有以下几个可选值: nothing, current, upstream, simple, matching 其用途分别为:
注意 push.default = current可以在远程同名分支不存在的情况下自动创建同名分支,有些时候这也是个极其方便的模式,比如初次push你可以直接输入 git push 而不必显示指定远程分支。
 

 
4. 同事b处理完成后也推送同步到git服务器,此时我需要拉取同步远程分支feature_abc进行发布
[可能你会偶尔看到下面的提示]
There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/<branch> new1
 
对git来说,git pull = git fetch + git merge,如果我们没有设定当前分支关联的远程分支,它并不知道我们要合并哪个分支到当前分支,所以我们需要通过下面的代码指定当前分支的关联分支
5. 合并分支代码到主干
 
6. 删除该特性分支
 
 
额外场景:
1. 当你在主分支误改了代码,该如何优雅的处理呢?
1.1 还未添加到暂存区/已添加到暂存区还未提交
这种情况比较好办,直接git checkout -b new_branch,这样你的改动会被带到新分支。然后把主分支的修改用git checkout --给恢复就行了。
另一种方法是先git stash,然后git checkout new_branch,再新分支git stash pop即可。这种方式最好理解,就是把改动先放到一个临时区域,让git先别管,到了正确的分支再拿出来。我经常用的就是这招。
 
2.2 已提交到本地仓库
这种情况就要有reset了,用git reset HEAD^撤销最近一次提交,如果有多次提交的话,查找到对应提交id进行reset就行。git默认的是mixed模式,即撤销暂存区,保留工作区。这样你再切分支也还能把改动带过去。当然加--soft也可以,这样能保留暂存区和工作区。
 
 
2.3已push到远程仓库
如果很不幸你已经把误修改给push了,你需要用到revert命令,先用git log查找到你误提交的commitId,然后git revert commitId,产生一次逆向提交,来对冲掉之前的。之后再push到远程就可以了。
 
 

git操作详解的更多相关文章

  1. 第一篇:Git操作详解

    最近由于项目的需要,我需要负责整个项目的托管,其中涉及到很多Git相关的命令,所以就将之前用到的git相关的命令做了一个总结和归纳.由于开发环境是Linux,所以我接下来的操作命令均针对Linux环境 ...

  2. 【Git使用详解】Egit的常用操作详解

    常用操作 操作 说明 Fetch 从远程获取最新版本到本地,不会自动merge Merge 可以把一个分支标签或某个commit的修改合并现在的分支上 Pull 从远程获取最新版本并merge到本地相 ...

  3. Git远程操作详解(转)

    转自:http://www.ruanyifeng.com/blog/2014/06/git_remote.html Git远程操作详解   Git是目前最流行的版本管理系统,学会Git几乎成了开发者的 ...

  4. 转载: GIt远程操作详解

    Git远程操作详解   作者: 阮一峰 日期: 2014年6月12日 Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介 ...

  5. Git应用详解第二讲:Git删除、修改、撤销操作

    前言 前情提要:Git应用详解第一讲:Git分区,配置与日志 在第一讲中我们对Git进行了简单的入门介绍,相信聪明的你已经了解Git的基本使用了. 这一讲我们来进一步深入学习Git应用,着重介绍Git ...

  6. Git应用详解第三讲:本地分支的重要操作

    前言 前情提要:Git应用详解第二讲:Git删除.修改.撤销操作 分支是git最核心的操作之一,了解分支的基本操作能够大大提高项目开发的效率.这一讲就来介绍一些分支的常见操作及其基本原理. 一.分支概 ...

  7. Git应用详解第七讲:Git refspec与远程分支的重要操作

    前言 前情提要:Git应用详解第六讲:Git协作与Git pull常见问题 这一节来介绍本地仓库与远程仓库的分支映射关系:git refspec.彻底弄清楚本地仓库到底是如何与远程仓库进行联系的. 一 ...

  8. iOS开发——开发实战篇&版本控制SVN和Git使用详解

     版本控制SVN和Git使用详解     公司的实际开发中,在天朝使用较多的还是SVN,因为SVN是集中式的,在天朝上班你们都懂的!     -----------------svn--------- ...

  9. Git命令详解

    一个中文git手册:http://progit.org/book/zh/ 原文:http://blog.csdn.net/sunboy_2050/article/details/7529841 前面两 ...

随机推荐

  1. 初学HTML5

    Document 什么是HTML5? 首先了解html:html即超文本语言,这是一种语法简单.结构清晰的语 解析型文档,他不同于其他的编程语言. html5就是html网页标记语言的第五次重大更新产 ...

  2. 传输控制协议TCP

    TCP主要特点: (1)面向连接 (2)只能是点到点 (3)可靠的传输协议 (4)全双工通信,各自各自的读写缓冲区,应用层吧数据交给发送缓冲区,tcp合适就发送了,接受的时候tcp写入接受缓冲区,应用 ...

  3. PHP 代码审计代码执行注入

    PHP 代码审计代码执行注入 所谓的代码执行注入就是 在php里面有些函数中输入的字符串参数会当做PHP代码执行. 如此的文章里面就大有文章可以探究了 一 常见的代码执行函数 Eval,assert, ...

  4. Ancient Cipher UVa1339

    这题就真的想刘汝佳说的那样,真的需要想象力,一开始还不明白一一映射是什么意思,到底是有顺序的映射?还是没顺序的映射? 答案是没顺序的映射,只要与26个字母一一映射就行 下面给出代码 //Uva1339 ...

  5. 【转】搜索引擎选择: Elasticsearch与Solr

    原文地址:http://i.zhcy.tk/blog/elasticsearchyu-solr/ Elasticsearch简介 Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助 ...

  6. ARP攻击

    ARP攻击,是针对以太网地址解析协议(ARP)的一种攻击技术,就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞.此种攻击可让攻击者取得局域网上的数据封包甚至 ...

  7. Docker私有仓库--自签名方式

    为了能集中管理我们创建好的镜像,方便部署服务,我们会创建私有的Docker仓库.通读了一遍官方文档,Docker为了确保安全使用TLS,需要CA认证,认证时间长的要钱啊,免费过期时间太短,还是用自签名 ...

  8. jQuery入门(一)

    相信学js的人多多少少听过JQuery,JQuery对于前端开发人员来说是不可或缺的,他让开发变得更加简单.那到底什么是JQuery呢?用一句话来说,JQuery就是一个javascript的库.所谓 ...

  9. Linked List Cycle && Linked List Cycle II

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Note ...

  10. Spring IOC容器中Bean的生命周期

    1.IOC容器中Bean的生命周期 构造器函数 设置属性 初始化函数(在Bean配置中 init-method) 使用Bean 结束时关闭容器(在Bean中配置destroy-method) 2.Be ...