git tag

https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE

git tag:查看所有tag

git tag -l 'v2.1.2.20170111.*'

git tag xx:打tag

git show v2.1.2.20170111.3.bgy

git push origin v2.1.2.20170111.3.bgy: 提交tag

git push origin --tags   要一次推送所有本地新增的标签上去

checkout到某个tag:

先 git clone 整个仓库,然后 git checkout tag_name 就可以取得 tag 对应的代码了。

但是这时候 git 可能会提示你当前处于一个“detached HEAD" 状态,因为 tag 相当于是一个快照,是不能更改它的代码的,如果要在 tag 代码的基础上做修改,你需要一个分支:

git checkout -b branch_name tag_name

这样会从 tag 创建一个分支,然后就和普通的 git 操作一样了。

git reset/revert 撤销

http://yijiebuyi.com/blog/8f985d539566d0bf3b804df6be4e0c90.html

http://gitbook.liuhui998.com/4_9.html

http://blog.jobbole.com/87700/

git revert 撤销某一个commit
git revert是用一次新的commit来回滚之前的commit
git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61

通常,前几位即可 git revert c011eb3

git reset 回退代码到指定状态

--mixed  未add的时候

会保留源码,只是将git commit和index 信息回退到了某个版本.

git reset 默认是 --mixed 模式 
git reset --mixed  等价于  git reset

--soft    add之后

保留源码,只回退到commit 信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.

--hard  撤销commit和add操作

源码也会回退到某个版本,commit和index 都回回退到某个版本.(注意,这种方式是改变本地代码仓库源码)

特殊场景:当用reset 恢复了远端代码,其他人pull更新本地代码,根本不能感知线上的回退。

解决:执行git reset --hard origin/release/1.2.2,把本地代码强制更新为远程的1.2.2分支最新的状态;

reset远程仓库代码之后没有多出来commit,此时执行pull感受不到远端比本地多出来的变化(没有新的commit),所以不会把远端代码更新到本地;

revert则会产生新的反向commit;

恢复某个文件:

git checkout -- hello.rb

这条命令把hello.rb从HEAD中签出并且把它恢复成未修改时的样子.

远程代码覆盖本地

解决方法:

1、如果还没有 commit 的话,可以用

git checkout .

这样将使所有代码还原到最后一次 commit 的状态

2、如果已经 commit 了,最简单的方法就是,删除当前的工程(注意保存有用的代码到别的地方)
然后使用

git clone https:// ....

重新 clone 远程工程到本地

或者

git fetch --all
git reset --hard origin/master

git reset --mixed HEAD 将你当前的改动从缓存区中移除,但是这些改动还留在工作目录中。
另一方面,如果你想完全舍弃你没有提交的改动,你可以使用git reset --hard HEAD。这是git reset最常用的两种用法

git pull 的意思并不是覆盖,而是和远程做一次比对,如果远程代码比本地的新,就把本地代码调整到远程代码最后一次 commit 的状态。而针对问题中的情况,本地代码比远程的新,所以 git pull 不会有任何作用。

版本恢复

版本恢复,本地和远程都恢复到历史提交版本commitid:

git reset -hard 6292d98 #本地恢复到指定版本,git reset --hard HEAD是恢复到最近提交

本地分支强行覆盖远程分支

git push origin master -f #强制用本地分支更新远程分支

http://www.tech126.com/git-reset/#comment-8055下面的评论

删除远程分支

http://zengrong.net/post/1746.htm

git删除远程分支:

如果不再需要某个远程分支了,比如搞定了某个特性并把它合并进了远程的 master 分支(或任何其他存放稳定代码的分支),可以用这个非常无厘头的语法来删除它:

git push [远程名] :[分支名]。如果想在服务器上删除 serverfix 分支,运行下面的命令:

$ git push origin :serverfix To git@github.com:schacon/simplegit.git - [deleted] serverfix

咚!服务器上的分支没了。你最好特别留心这一页,因为你一定会用到那个命令,而且你很可能会忘掉它的语法。

有种方便记忆这条命令的方法:记住我们不久前见过的 git push [远程名] [本地分支]:[远程分支] 语法,如果省略 [本地分支],那就等于是在说“在这里提取空白然后把它变成[远程分支]”。

git push origin :old_master #master没法删,只能删其他分支,所以这个方法不能用于上面的master分支回滚版本。

http://my.oschina.net/tsingxu/blog/84601

https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF#删除远程分支

删除本地分支

git branch -d <branchname>

比较两个分支的不同

git diff  branch_a..branch_b

git自动补全功能

https://i.cnblogs.com/EditPosts.aspx?postid=4422412

按tab键自动补全命令

locate git-completion.bash找到这个文件,在.bashrc中加入source pathto/git-completion.bash

把这个文件复制到系统目录:

$cp git/contrib/completion/git-completion.bash ~/.git-completion.bash

 在 .bashrc 中加入:重新进入terminal,或者直接手动执行下;

source ~/.git-completion.bash

玩转GIT的更多相关文章

  1. 2015继续任性——不会Git命令,照样玩转Git

    最近事情比较多,一眨眼,已经半个月没有写博客了~不得不感慨光阴似箭啊!当然,2015年有很多让我们期待的事情,比如win10正式版..NET开源.VS2015等等.想想都让人兴奋啊~~ 为了迎接VS2 ...

  2. 玩转Git入门篇

    最近项目使用到Git管理项目,所以就学习了一番,随然网上关于 Git的文章铺天盖地,我还是整理下总结下自己学习Git相关笔记,希望也能帮助到需要他的小伙伴们,O(∩_∩)O~ 简介 Git 是分布式版 ...

  3. 我教你怎么玩转git

    我教你怎么玩转git 1.想要练习解决冲突? 很好办.创建本地分支,a,b, a上面,这样改.b上面那样改. 然后你就解决冲突就可以了. 可以merge 或者cheerypick 2.想要玩一个不要历 ...

  4. 手把手教你玩转Git分布式版本控制系统! (转载)

    目录 Git诞生历史 Git环境准备 Git安装部署 Git常用命令 Git基本操作 Git管理分支结构 Git管理标签 GitLab安装部署 GitHub托管服务 Git客户端工具 Git诞生历史 ...

  5. 手把手教你玩转Git分布式版本控制系统!

    目录 Git诞生历史 Git环境准备 Git安装部署 Git常用命令 Git基本操作 Git管理分支结构 Git管理标签 GitLab安装部署 GitHub托管服务 Git客户端工具 1 Git诞生历 ...

  6. 玩转git分支

    搞个代码的管理工具,居然不弄上分支啥的东西.这简直太low了.尤其是在使用了传说中得很牛X的Git的时候,尤其显得low.拿着青龙偃月刀当烧火棍子使,关公知道了还不重反人间教育你!? 远程分支 要说分 ...

  7. 玩转Git之初识Git

    git是什么 Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目 Git 和 svn 有什么区别 它们之间的主要区别是Git是分布式的,而svn是集中式. 当然Git也可 ...

  8. 玩转git版本控制软件

    一.git的基本介绍 1.什么是git? git是个开源的分布式版本控制软件,用以有效.高速的处理从很小到非常大的项目版本管理.说白了就是个版本控制软件 2.git的使用方法 git软件是通过命令来实 ...

  9. 版本管理·玩转git(快速入门git)

    如果你用过Word文档写过文章,那么你一定会有这样的经历. 我觉得某一段或者某一句写得不够好,但是,删掉之后我可能会后悔把它删掉了,进而又想把删掉的段落找回来,这时,你想到了一个好办法,将每次的修改都 ...

随机推荐

  1. 《JavaScript DOM编程艺术(第二版)》读书总结

    这本书是一本很基础的书,但对于刚入前端不久的我来说是一本不错的书,收获还是很大的,对一些基础的东西理解得更加透彻了. 1.DOM即document object model的缩写,文档对象模型,Jav ...

  2. Startup配置类 居然又是约定

    Microsoft.Owin.Host.SystemWeb 这个dll可以让OWin接管IIS的请求,虽然同样是托管在IIS,但是所有的请求都会被OWin来处理.在OWin的4层结构中(Applica ...

  3. yuv420p转为emgucv的图像格式Emgu.CV.Image<Bgr, Byte>

    GCHandle handle = GCHandle.Alloc(yuvs, GCHandleType.Pinned); Emgu.CV.Image<Bgr, Byte> image = ...

  4. 面试题目——《CC150》中等难题

    面试题17.1:编写一个函数,不用临时变量,直接交换两个数. 思路:使用差值或者异或 package cc150.middle; public class Exchange { public stat ...

  5. Spring3.0目录

    (1)Spring 入门知识 (2)IoC/DI基本思想的演变 (3)深入理解IoC/DI (4)Spring的简单demo

  6. golang笔记——函数与方法

    如果你遇到没有函数体的函数声明,表示该函数不是以Go实现的. package math func Sin(x float64) float //implemented in assembly lang ...

  7. tyvj1198 最优矩阵连乘

    描述    一个n*m矩阵由n行m列共n*m个数排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个N*M的矩阵乘以一个M*P的矩阵等于一个N*P的矩阵,运算量为nmp.   矩阵乘法满 ...

  8. vijos1250 最勇敢的机器人

    背景 Wind设计了很多机器人.但是它们都认为自己是最强的,于是,一场比赛开始了~ 描述 机器人们都想知道谁是最勇敢的,于是它们比赛搬运一些物品. 它们到了一个仓库,里面有n个物品,每个物品都有一个价 ...

  9. C和指针 第十章 结构和联合 (一)

    结构体: 聚合数据类型是指,能够同时存储超过一个的单独数据,C语言中有两个聚合数据类型,数组和结构体.数组中储存的类型必须相同,元素通过下标和指针引用来访问的. 结构体也是一些值的集合,但是结构体中每 ...

  10. sublime 编译运行C程序

    { "cmd": ["gcc", "${file}", "-o","${file_path}/${file_b ...