最近使用git较多,所以搜索了一些写的比较好的git使用指南,列表如下:

  1. 首推git的官方文档,很权威也很全面,但是内容很多,可以作为查阅档案:http://git-scm.com/docs
  2. 英文文档,文章不长,介绍清楚了git的核心结构和经常使用的命令:http://www.vogella.com/articles/Git/article.html
  3. 中文版使用指南,简单实用,开篇的图清晰明了地描绘了git核心结构:https://sites.google.com/a/kingofat.com/wiki/git-tutorial

Git使用指南

Refer to How to version projects with Git

1.创建目录

$ git config –global user.name “Your Name Comes Here”

$ git config –global user.email you@yourdomain.example.com

$ git config –list 查看相关信息

$ git init

如果作为 Server 存在,那么可以忽略工作目录,以纯代码仓库形式存在。

$ git –bare init

可以在~/.gitconfig设置别名

[alias]
st = status
ci = commit -a
co = checkout

2.文件操作

$ git add .

$ git add file1 file2 file3

$ git add -u

$ git add -p // 为你做的每次修改,Git将为你展示变动的代码,并询问该变动是否应是下一次提交的一部分。回答“y”或者“n”。也有其他选项,比如延迟决定:键入“?”来学习更多。

$ git rm file1 file2 file3

$ git mv file1 file2

3.提交更改

$ git commit -a -m ‘ ‘

$ git commit –amend -a -m ‘ ‘ // 修改上一次的信息,不作为新的提交

$ git stash // 保存当前草稿,便于切换分支

$ git stash pop
$ git stash apply
$ git stash list
$ git stash apply stash@{1}
$ git stash clear

4.撤销更改

$ git reset HEAD file1 // 取消暂存区的文件快照(即恢复成最后一个提交版本),这不会影响工作目录的文件修改。

$ git reset –hard HEAD^ // 将整个项目回溯到以前的某个版本,可以使用 “git reset”。可以选择的参数包括默认的 “–mixed” 和 “–hard”,前者不会取消工作目录的修改,而后者则放弃全部的修改。该操作会丢失其后的日志

$ git checkout — file1 // 使用暂存区快照恢复工作目录文件,工作目录的文件修改被抛弃。

$ git checkout HEAD^ file1 // 直接 “签出” 代码仓库中的某个文件版本到工作目录,该操作同时会取消暂存区快照。

$ git checkout “@{10 minutes ago}” // 直接 “签出” 10分钟之前代码仓库中的某个文件版本到工作目录,该操作同时会取消暂存区快照。

$ git checkout “@{5}” // 直接 “签出” 倒数第五次保存的某个文件版本到工作目录,该操作同时会取消暂存区快照。

$ git revert SHA1_HASH // 还原特定哈希值对应的提交。该还原记录作为一个新的提交。

5.查看历史纪录或者当前状态

$ git log

$ git log -p

$ git log –stat –summary

$ git log V3..V7 //显示V3之后直至V7的所有历史记录

$ git log V3.. //显示所有V3之后的历史记录。注意<since>..<until>中任何一个被省略都将被默认设置为HEAD。所以如果使用..<until>的话,git log在大部分情况下会输出空的。

$ git log –since=”2 weeks ago” //显示2周前到现在的所有历史记录。具体语法可查询git-ref-parse命令的帮助文件。

$ git log stable..experimental //将显示在experimental分支但不在stable分支的历史记录

$ git log experimental..stable //将显示在stable分支但不在experimental分支的历史记录

$ git log -S’你要找的内容’,就可以从全部的历史纪录,瞬間找到你要找的东西

$ git blame FILE // 标注出一个指定的文件里每一行内容的最后修改者,和最后修改时间。

$ git diff // 这个命令只在git add之前使用有效。如果已经add了,那么此命令输出为空

$ git diff –cached // 这个命令在git add之后在git commit之前有效。

$ git diff “@{yesterday}” // 比较当前和昨天的内容

$ git status // 这个命令在git commit之前有效,表示都有哪些文件发生了改动

$ git show 5b888 // 使用git show再加上述的commit名称来显式更详细的commit信息$ git show master // 显示分支信息$ git show HEAD // 使用HEAD字段可以代表当前分支的头(也就是最近一次commit)$ git show HEAD^ //查看HEAD的父母的信息, 可以使用^表示parent$ git show HEAD^^ //查看HEAD的父母的父母的信息$ git show HEAD~4 //查看HEAD上溯4代的信息$ git tag V3 5b888 //以后可以用V3来代替复杂的名称(5b888…)$ git show V3$ git branch stable V3 //建立一个基于V3的分支

$ git grep “print” V3 //在V3中搜索所有的包含print的行

$ git grep “print” //在所有的历史记录中搜索包含print的行

6.协作操作

$ git clone git://server/path/to/files // Git deamon

$ git clone your.computer:/path/to/script  or git clone ssh://car.colorado.edu/home/xxx ./xxxxx // SSH

// SSH
$ git pull$ git push // 在将代码提交(push)到服务器之前,首先要确认相关更新已经合并(merge)到主分支(master)。还应该先从服务器刷新(pull)最新代码,以确保自己的提交不会和别人最新提交的代码冲突。如果想在merge前先查看更改:$ git fetch /home/bob/myrepo master:bobworks //此命令意思是提取出bob修改的代码内容,然后放到我(rocrocket)工作目录下的bobworks分支中。之所以要放到分支中,而不是master中,就是要我先仔仔细细看看bob的开发成果,如果我觉得满意,我再merge到master中,如果不满意,我完全可以直接git branch -D掉。$ git whatchanged -p master..bobworks //用来查看bob都做了什么$ git checkout master //切换到master分区$ git pull . bobworks //如果我检查了bob的工作后很满意,就可以用pull来将bobworks分支合并到我的项目中了

7.分支管理

$ git branch: 查看当前分支

$ git checkout -b/branch experimental: 创建新分支

$ git checkout experimental: 切换到另一分支

$ git merge experimental:合并分支

$ git branch -d experimental:删除分支, 使用的是小写的-d,表示“在分支已经合并到主干后删除分支”。

$ git branch -D experimental:删除分支, 表示“不论如何都删除分支”,-D使用在“分支被证明失败”

8.补丁工作

git format-patch:当你想给一个开源项目(例如Rails)提交一段代码的时候,或者你想给小组成员展示一段你并不想提交的代码,那么你还是需要 patch的,Git的’format-patch’命令良好的支持了这个功能。
第一,利用branch命令 创建一个分支;
第二,修改你的代码;
第三,在该分支上提交你的修改;
第四,使用’git format-patch’命令来生成一个patch文件,例如:’git format-patch master –stdout > ~/Desktop/tmp.patch’就是将工作分支与master主干的不同,存放在’~/Desktop’文件夹下,生成一个叫做 tmp.patch的文件(另一种简单的版本是利用diff命令,例如’git diff ..master > ~/Desktop/tmp.patch’),这样就生成了patch文件。那么别人就可以使用’git apply’命令来应用patch,例如’git apply ~/Desktop/tmp.patch’就是将patch打在当前的工作分支上

9.仓库维护

$ git fsck: 不加–full参数的情况下,这个命令一般会以非常低廉的代价确保仓库在一个不错的健康状态之中。

$ git count-objects: 统计有多少松散的对象,没有 repack 的对象消耗了多少硬盘空间。

$ git gc: 在本地仓库进行 repack,并进行其他日常维护工作。

$ git filter-branch –tree-filter `rm top/secret/file` HEAD //在所有记录中永久删除某个文件

$ git rebase -i HEAD~10 // 后10个提交会出现在你喜爱的$EDITOR。通过删除行来移去提交。通过为行重新排序来为提交重新排序。用“edit”来替换“pick”来标志一个提交可修改。用“squash”来替换“pick”来将一个提交和前一个合并。

10.错误查询

刚刚发现程序里有一个功能出错了,即使你过去经常提交变更,Git还是可以精确的找出问题所在:

$ git bisect start

$ git bisect bad SHA1_OF_BAD_VERSION

$ git bisect good SHA1_OF_GOOD_VERSION

Git从历史记录中检出一个中间的状态,在这个状态上测试功能,如果还是错误的:

$ git bisect bad

如果可以工作了,则把”bad”替换成”good”。 Git会再次帮你找到一个以确定的好版本和坏版本之间的状态,经过一系列的迭代,这种二进制查询会帮你找到导致这个错误的那次提交。一旦完成了问题定位的调查,你可以返回到原始状态,键入:

$ git bisect reset

不需要手工测试每一次改动,执行如下命令可以自动的完成上面的搜索:$ git bisect run COMMANDGit使用指定命令(通常是一个一次性的脚本)的返回值来决定一次改动是否是正确的:命令退出时的代码0代表改动是正确的,125代表要跳过对这次改动的检查,1到127之间的其他数值代表改动是错误的。返回负数将会中断整个bisect的检查。
———————————————————————————————————–将 Current working directory 记为 工作目录(1)将 Index file 记为 暂存区(2)将 Git repository 记为 代码仓库(3)他们之间的提交层次关系是 (1) -> (2) -> (3)git add完成的是(1) -> (2)git commit完成的是(2) -> (3)git commit -a两者的直接结合从时间上看,可以认为(1)是最新的代码,(2)比较旧,(3)更旧

按时间排序就是 (1) <- (2) <- (3)

git diff得到的是从(2)到(1)的变化

git diff –cached得到的是从(3)到(2)的变化

git diff HEAD得到的是从(3)到(1)的变化

转载于:https://www.cnblogs.com/zhangchenliang/archive/2012/12/10/2811204.html

[转]git使用指南系列相关推荐

  1. Phalcon在Windows上安装 《Phalcon入坑指南系列 一》

    Phalcon入坑指南 本系列目录 前言 一.安装 二.Phalcon 开发工具安装 三.环境变量配置 四.Phalcon 开发工具的使用 生成项目框架 生成控制器 / 模型 夸一下phalcon 五 ...

  2. git 简易指南+常用命令

    git 简易指南                      git 常用命令   ----------------------------------------------------------- ...

  3. 手把手教你入门Git --- Git使用指南(Linux)

    手把手教你入门Git - Git使用指南(Linux) 系统:ubuntu 18.04 LTS 本文所有git命令操作实验具有连续性,git小白完全可以从头到尾跟着本文所有给出的命令走一遍,就会对gi ...

  4. gateway网关_SpringCloud技术指南系列(十二)API网关之Gateway使用

    SpringCloud技术指南系列(十二)API网关之Gateway使用 一.概述 API网关是一个更为智能的应用服务器,它的定义类似于面向对象设计模式中的Facade模式,它的存在就像是整个微服务架 ...

  5. 项目经理的商务指南系列之二:认识责任(敏捷开发,专家与杂家)

    本文是项目经理的商务指南系列中的第一篇.(之一:序言及项目本质,之二:认识责任,之三:认识客户,之四:认识谈判,之五:认识项目进展,之六:认识回款,之七:将项目推向不败之地) 认识责任 本系列的名称为 ...

  6. 项目经理的商务指南系列之四:认识谈判(不做传声筒,不做顶门闩,进退之策,进退之法,有机事者必有机心)...

    本文是项目经理的商务指南系列中的第四篇.(之一:序言及项目本质,之二:认识责任,之三:认识客户,之四:认识谈判,之五:认识项目进展,之六:认识回款,之七:将项目推向不败之地) 谈判是一件让大门不出二门 ...

  7. 项目经理的商务指南系列之三:认识客户(敏捷开发,被动而弱小的客户,理解客户的古怪行为,如何喜欢上客户)...

    本文是项目经理的商务指南系列中的第三篇.(之一:序言及项目本质,之二:认识责任,之三:认识客户,之四:认识谈判,之五:认识项目进展,之六:认识回款,之七:将项目推向不败之地) 被动而弱小的客户 客户常 ...

  8. CTO职场解惑指南系列(二)春节篇

    很多理财.电商平台要在春节要搞大促,担心黑客冒充用户去抢样品抢补贴,占用大量CPU服务器资源,导致真的用户进不去网站买不了,白白将真金白银给到了黄牛.短期好看的数据背后,自己的产品并没有卖给真正的用户 ...

  9. 独家食用指南系列|Android端SQLCipher的攻与防新编

    大家好,今天给大家的是本周技术拆解官的第二篇文章,主题依然是沿用上一篇文章的主题–Android端SQLite的"食用指南",上篇文章我们讲到了基本的SQLite的定义.使用方法以 ...

  10. STM32F4+DP83848以太网通信指南系列(一):知识储备

    丁丁的博客:https://www.hexcode.cn/article/show/stm32-ethernet1 2017-12-09 17:32:19 以太网通信 stm32 STM32F4+DP ...

最新文章

  1. 我去!一周内,在闲鱼上被疯狂转了2.6万次的架构课程,现在免费!(限时领)...
  2. Python之父,现在成为微软打工人
  3. 【转载】增强中调用BAPI并COMMIT使用
  4. docker安装nexus3命令
  5. vim编写python_用vim写python代码
  6. kubelet启动失败_kubelet 架构浅析
  7. ubuntu linux kvm安装,ubuntu16.04 下kvm安装
  8. 焦作师范高等专科学校计算机,焦作师范高等专科学校计算机房管理规定
  9. java进销存系统--采购入库
  10. 你知道 1 + 1 等于几吗?
  11. python卡方检验 scipy_卡方检验的scipy实现
  12. 层次分析法(AHP)原理_例题应用及代码
  13. 巧妙的实现一套键鼠无缝控制两台联网的主机
  14. oracle怎么用dmp文件,oracle 11g 如何打开dmp文件
  15. 数字调制解调技术:第7章-COSATAS环载波频率参数设计问题
  16. 怎么保护PDF的文字不被复制?
  17. 电脑桌面切屏的快捷键
  18. 【深度学习】关于EMA:指数移动平均
  19. git克隆时出现not fount问题
  20. 经典CVE:破壳漏洞

热门文章

  1. js 时间格式与时间戳的相互转换示例代码
  2. 类成员指针——偏移量
  3. c/c++学习系列之memset()函数
  4. 均值模糊调试遇到的问题
  5. 排序算法专题-堆排序
  6. 正态总体样本的分布定理
  7. 动态通讯录(动态内存开辟)(C语言)
  8. php检测手机是否开飞行模式,Android_android 如何判断当前是否为飞行模式,Android中如何判断系统当前是否 - phpStudy...
  9. cas 怎么过滤带pathvariable_屋顶花池怎么做
  10. 从 Bitmap 到布隆过滤器,再到高并发缓存设计策略!