版本控制 / Version Control


目录

  1. git-版本控制 / git-Version Control
  2. git-常用命令 / git-Freq Command
  3. git-文件忽略 / git-.gitignore
  4. git-自动补全 / git-Auto Completion
  5. git-衍合原则 / git-Rebase Principle
  6. git-回滚仓库 / git-Reset Repository
  7. git-重命名分支 / git-Rename Branch

1 git-版本控制 / git-Version Control

关于 Git 教程及理念可参考 Git 的手册 Pro Git,关于git分支的理解可参考第三章,其本质为指针对象。

2 git-常用命令 / git-Freq Command

基本配置

git config --global user.name "KE LI"                           设置全局用户名

git config --global user.email "keli@example.com"      设置全局邮箱

git config --list                                                          查看配置信息

基本操作

git help <verb>                                                         查看<verb>使用方法

git init                                                                       初始化新的git仓库

git add .                                                                    添加所有文件

git add <filename>                                                    添加指定文件

git commit -m"<description>"                                 提交修改操作

git commit -a                                                            跳过git add提交,可连用-m

git commit --amend                                                   修改上次提交(补充漏加文件等)

git clone <url> [<dirname>]                                     从远程仓库进行克隆

git status                                                                  查看当前目录状态

git diff[ cached/staged]                                                查看[暂存]更改差异

git rm --cached <filename>                                         移除缓存区文件,保留源文件

git mv <file_from> <file_to>                                      改名操作

git log[ -p -2]                                                            查看提交历史,-p展开,-2查看两条

git log --graph                                                          查看提交分支图

git reset HEAD <filename>                                            取消暂存的文件(git add之后)

git checkout -- <filename>                                           撤销对指定文件的修改

远程仓库

git remote[ -v]                                                           查看远程仓库[-v为地址]

git remote add [shortname] [url]                              添加一个远程仓库,并命名

git remote show [remote-name]                                   查看某个远程仓库的信息

git remote rename <from_name> <to_name>                远程仓库改名

git remote rm <remote-name>                                     移除远程仓库

git fetch [remote-name]                                             从远程仓库抓取数据

git push [remote-name] [branch-name]                   推送数据到远程仓库

git push [remote-name] <from_branch>:<to_branch>   上传分支并命名为<to_branch>

git push [remote-name] :<to_branch>                     删除远程分支

标签

git tag                                                                          显示所有标签

git tag -l "v1.4.2.*"                                                     显示v1.4.2系列标签

git tag -a <tag-name>[ -m "Comments"]                      创建标签

git tag -d <tag-name>                                                 删除标签

分支

git branch                                                                    查看分支清单

git branch <branch-name>                                          创建分支

git branch -d <branch-name>                                      删除分支

git branch --merged/no-merged                                   查看已经/尚未与当前分支合并分支

git checkout <branch-name>                                    切换分支

git checkout -b <branch-name>                               新建并切换分支

git merge <branch-name>                                        合并分支(分支单线可到达时为FW)

git cherry-pick <commit-id>                                    获取某次提交的特性合并至当前

分支衍合

git rebase <branch-name>                                          衍合分支,如在branch,rebase master

git rebase [onto_b] <from_b>                                     衍合分支,from_b到onto_b

git rebase --onto <onto_b> <skip_b> <from_b>           将from_b跳过skip_b衍合到onto_b

版本回退

git reset --hard/soft head^                                           回退到前一个版本(^),head指当前

git reset --hard/soft head~x                                         回退到前x个版本

git reset --hard id                                                       回退到id版本,git reflog查看

git reset --hard <filename>                                          撤回文件添加add(暂存区—>工作区)

3 git-文件忽略 / git-.gitignore

.gitignore文件的创建

使用git bash,在命令行输入touch .gitignore生成一个.gitignore文件

.gitignore文件的格式规范

1. 所有空行或者以注释符号 # 开头的行都会被 Git 忽略;

2. 可以使用标准的 glob 模式匹配;

3. 匹配模式最后跟反斜杠(/)说明要忽略的是目录;

4. 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反;

Note: 所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。

星号(*)匹配零个或多个任意字符;

[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个a,要么匹配一个b,要么匹配一个c);

问号(?)只匹配一个任意字符;

如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。

4 git-自动补全 / git-Auto Completion

如果在 Windows 上安装了 msysGit,默认使用的 Git Bash 就已经配好了这个自动补全脚本,可以直接使用。

在输入 Git 命令的时候可以敲两次跳格键(Tab),就会看到列出所有匹配的可用命令建议:

  1. $ git co<tab><tab>
  2. commit config

此例中,键入 git co 然后连按两次 Tab 键,会看到两个相关的建议(命令) commit 和 config。继而输入 m<tab> 会自动完成 git commit 命令的输入。

命令的选项也可以用这种方式自动完成,其实这种情况更实用些。比如运行 git log 的时候忘了相关选项的名字,可以输入开头的几个字母,然后敲 Tab 键看看有哪些匹配的:

  1. $ git log --s<tab>
  2. --shortstat --since= --src-prefix= --stat --summary

5 git-衍合原则 / git-Rebase Principle

在git的衍合中,需遵循以下原则,详细细节参考Pro Git 3.6节:

一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。

6 git-回滚仓库 / git-Reset Repository

Note: 回滚仓库将会对整个项目造成很大的影响,在回滚之前请做好确认工作。

回滚远程仓库主要有以下几种情况,可参见链接

此处介绍删除最后一次/多次提交,这种情况只需要两步,

  1. git revert HEAD^
  2. git push origin master

此外,若使用reset回滚,则push时需加上-f参数,进行强制提交,因为此时本地仓库落后于远程仓库。

  1. git reset HEAD^
  2. git push origin master -f

Note: revert和reset的区别,在于revert会放弃指定提交的修改,但是会生成一个新的提交,以前的历史记录也都存在,而reset则将HEAD指针直接指向某次提交,历史记录中不会出现放弃提交记录

也可使用不同的参数,进行多次回滚或回滚至特定的提交处。

7 git-重命名分支 / git-Rename Branch

在git中若需要对分支进行重命名可以通过一些步骤实现,

  1. push当前分支到新的远程分支;
  2. checkout到新的分支;
  3. 删除旧的远程分支;
  4. 删除旧的本地分支。
  1. git push origin <old branch>:<new branch>
  2. git checkout <new branch>
  3. git push :<old branch>
  4. git branch -d <old branch>

参考链接


http://git.oschina.net/progit/

https://zhidao.baidu.com/question/2053485325521871027.html

版本控制[0] -> git -> 使用 git 进行版本控制的更多相关文章

  1. 在Xcode中使用Git进行源码版本控制

    http://www.cocoachina.com/ios/20140524/8536.html 资讯 论坛 代码 工具 招聘 CVP 外快 博客new 登录| 注册   iOS开发 Swift Ap ...

  2. Git打标签与版本控制规范

    前言 本文适用于使用Git做VCS(版本控制系统)的场景. 用过Git的程序猿,都喜欢其分布式架构带来的commit快感.不用像使用SVN这种集中式版本管理系统,每一次提交代码,都要为代码冲突捏一把冷 ...

  3. 规范-Git打标签与版本控制

    Git打标签与版本控制规范 前言 本文适用于使用Git做VCS(版本控制系统)的场景. 用过Git的程序猿,都喜欢其分布式架构带来的commit快感.不用像使用SVN这种集中式版本管理系统,每一次提交 ...

  4. 团队项目开发中,常见的版本控制有svn,git

    团队项目开发中,常见的版本控制有svn,git

  5. git 入门教程之版本控制

    版本控制 我们知道 git 是分布式版本控制系统,所以称被控制对象是版本本身没错,但是从git 命令中发现,并没有版本这个名词,有的只是commit,所以前几节我一直称其为提交. 为了避免后续教程引发 ...

  6. 版本控制(svn、Git)环境创建

    1.SVN 2.Git last 版本控制工具应该具备的功能: 协同修改: 数据备份: 版本管理: 权限控制: 历史记录:查看修改人.修改时间.修改内容…… 分支管理:开发团队在工作过程中多条产品线同 ...

  7. 代码版本控制[version control]之Git

    如何多人协同开发同一个项目? 使用代码版本控制[version control]软件, 目前市面上比较流行的代码版本控制器有: git,svn,csv 1. 使用git管理代码版本 本项目使用git管 ...

  8. Git版本控制之ubuntu搭建Git服务器

    Git是一个开源的分布式版本控制系统,可以有效.高效的处理从很小到非常大的项目版本管理.使得开发者可以通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库,也可以将代码提交到Git服务 ...

  9. 版本控制比较cvs,svn,git

    版本控制比较cvs,svn,git 几个重要概念: 版本库模型(Repository model):描述了多个源码版本库副本间的关系,有客户端/服务器和分布式两种模式.在客户端/服务器模式下,每一用户 ...

随机推荐

  1. 设计模式之第22章-组合模式(Java实现)

    设计模式之第22章-组合模式(Java实现) “鱼哥,有没有什么模式是用来处理树形的“部分与整体”的层次结构的啊.”“当然”“没有?”“有啊.别急,一会人就到了.” 组合模式之自我介绍 “请问你是?怎 ...

  2. Jmeter mysql性能测试

    一:首先建立jdbc connection configuration,设置参数如图 1.variable name 参数名称,与后面的sample中设置的variable name一致.含义为:通过 ...

  3. FOJ Problem 1016 无归之室

     Problem 1016 无归之室 Accept: 926    Submit: 7502Time Limit: 1000 mSec    Memory Limit : 32768 KB  Prob ...

  4. 防御暴力破解SSH攻击

    托管在IDC的机器我们通常都用SSH方式来远程管理.但是经常可以发现log-watch的日志中有大量试探登录的 信息,为了我们的主机安全,有必要想个方法来阻挡这些可恨的"HACKER&quo ...

  5. 29个android开发常用的类、方法及接口

    在安卓开发中,我们常常都需要借助各种各样的方法.类和接口来实现相关功能.提升开发效率,但对于初学者而言,什么时候该用什么类.方法和接口呢?下面小编整理了29个,日常开发中比较常用的类.方法.接口及其应 ...

  6. [CF845G]Shortest Path Problem?

    题目大意:同这道题,只是把最大值变成了最小值 题解:略 卡点:无 C++ Code: #include <cstdio> #define maxn 100010 #define maxm ...

  7. POJ 3041 Asteroids | 匈牙利算法模板

    emmmmm 让你敲个匈牙利 #include<cstdio> #include<algorithm> #include<cstring> #define N 51 ...

  8. BZOJ4890 [Tjoi2017]城市 【树形dp】

    题目链接 BZOJ4890 题解 枚举断开哪一条边,然后对剩余的两棵树分别做一遍换根法树形dp 需要求出每个点到树中其它点距离的最大值\(f[i]\)和次大值\(g[i]\)[用以辅助换根计算最大值] ...

  9. APIO2017游记

    铁牌选手爆零滚粗记QAQ........ CCF说不让讨论APIO相关内容不过现在应该没事了吧QAQ day0:上午还在学校填清北夏令营的表,下午上火车去北京,晚上颓颓颓...... day1:上午网 ...

  10. ACM-渊子赛马

    题目: 赛马是一古老的游戏,早在公元前四世纪的中国,处在诸侯割据的状态,历史上称为“战国时期”.在魏国作官的孙膑,因为受到同僚庞涓的迫害,被齐国使臣救出后,到达齐国国都. 赛马是当时最受齐国贵族欢迎的 ...