强大的版本管理工具 Git
Git 简介
Git 安装
提供了各种平台的安装方法,跟着说明安装即可。
以 windows 系统为例,安装完后打开 git bash 命令行工具,输入 git --version 查看安装的 git 版本
alsy@home-alsy MINGW64 /
$ git --version
git version 2.11..windows.
打印出版本信息说明你已经成功安装 git 了
Git 的相关设置
1. 自报家门,设置你的姓名和 email
$ git config --global user.name "your_name"
$ git config --global user.email "your_email"
注意: git config 命令的 --global 参数,这时你这台电脑上所有的 git 仓库都会使用这个配置,当然你也可以针对某个仓库指定不同的用户名和 email 地址。
2. 设置 git 输出显示颜色,看起来更醒目
$ git config --global color.ui true
3. 关于 git config
查看仓库级的config,命令:git config --local -l
查看全局级的config,命令:git config --global -l
查看系统级的config,命令:git config --system -l
注意配置文件的优先级是: 仓库 > 全局 > 系统
查看当前生效的配置,命令:git config -l,这个时候会显示最终三个配置文件计算后的配置信息
$ git config --local -l
$ git config --system -l
$ git config --global -l
$ git config -l
Git 工作流
你的本地仓库由 git 维护的三棵“树”组成。
第一个是你的工作区, 它持有实际文件,就是你在文件资源管理器中看到的。
第二个是暂存区(stage),它像个缓存区域,临时保存你的改动。
最后是HEAD,它指向你最后一次提交的结果。
Git 相关操作
1. 创建新仓库
在一个空的工作目录中开始,创建一个名为 learngit 的空目录, 然后创建一个名为 a.txt 的文件。
$ mkdir learngit
$ cd learngit
$ touch a.txt
$ ls
a.txt
你现在有一个包含单个文件的目录,执行 git init 命令,从该目录创建 git 仓库。git 会自动创建的一个分支叫 master。
$ git init
Initialized empty Git repository in G:/learngit/.git/
2. 检查仓库的状态
使用 git status 命令检查当前仓库的状态,这是个比较常用的命令。
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
a.txt
nothing added to commit but untracked files present (use "git add" to track)
3. 将更改提到暂存区
使用 git add <file> 命令将文件更改提交到暂存区,当有多个文件时使用 git add . 命令提交所有文件的修改包括新建的文件。
$ git add a.txt
$ git add .
使用 git status 查看仓库的状态
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: a.txt
4. 把暂存区的内容提交到当前分支(默认为 master)
这里会有一个 HEAD 指针指向 master 分支,并且 HEAD 指针总是指向你的当前分支。
$ git commit
[master (root-commit) 91c0959] first commit
file changed, insertions(+), deletions(-)
create mode a.txt
执行 git commit 命令,会调出文本编辑器,提示你输入一段本次提交的描述。
你也可以使用 git commit -m 'first commit' 来快速的进行描述提交,如果发现提交的描述有误或者不恰当可以使用 git commit --amend 命令来对最近提交的描述信息进行替换
使用 git status 查看仓库的状态
$ git status
On branch master
nothing to commit, working tree clean
5. 查看历史提交记录
使用 git log 命令查看
$ git log
commit 91c0959fab89f5a612db84f047bf13afb1162a26
Author: alsy <@qq.com>
Date: Sat Mar :: + first commit
这时列出了我们第一次提交的记录
下面我们来更改 a.txt 的内容, 再次提交来查看记录
$ echo 'some modified' > a.txt //向a.txt写入'some modified' $ git status //查看仓库的状态
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: a.txt no changes added to commit (use "git add" and/or "git commit -a") $ git commit -a -m 'second commit' //这是暂存和提交一起操作的缩写,后面跟描述
[master e9df1e3] second commit
file changed, insertions(+) $ git log //查看记录 commit e9df1e351fc321d4c63bfe9f76773759a03012e2
Author: alsy <@qq.com>
Date: Sat Mar :: + second commit commit 91c0959fab89f5a612db84f047bf13afb1162a26
Author: alsy <@qq.com>
Date: Sat Mar :: + first commit
我们可以看到我们这两次提交的记录
6. 撤销修改
文件的撤销修改可以分为三个时间点的撤销
a. 修改了文件,没有 add 到暂存区
$ echo 'some modified ~' >> a.txt //往 a.txt 追加 'some modified ~' $ cat a.txt //输出 a.txt 的内容
some modified
some modified ~ $ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: a.txt no changes added to commit (use "git add" and/or "git commit -a")
可以看到我们修改了 a.txt 文件,此时查看状态,git 会提示你是要 git add <file> 去提交更改还是 git checkout -- <file> 去丢弃更改,当然这里我们是要丢弃更改
$ git checkout -- a.txt $ git status
On branch master
nothing to commit, working tree clean $ cat a.txt
some modified
此时 a.txt 有恢复到原来的状态
b. add 到暂存区,没有 commit 到分支
$ echo 'some modified ~' >> a.txt $ git add a.txt $ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: a.txt
可以看到我们修改了 a.txt 文件并且把它提交到暂存区,此时查看状态,git 会提示你 git reset HEAD <file> 把暂存区的修改撤销掉(unstage),重新放回工作区
$ git reset HEAD a.txt
Unstaged changes after reset:
M a.txt $ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: a.txt no changes added to commit (use "git add" and/or "git commit -a")
执行 git reset HEAD a.txt 命令后,我们查看状态,可以看到暂存区是干净的,工作区的 a.txt 有修改,和第 1 种情况一样
c. commit 到分支
$ echo 'some modified ~' >> a.txt $ git commit -a -m 'add some modified'
[master 533f16a] add some modified
file changed, insertion(+) $ git st
On branch master
nothing to commit, working tree clean $ git log
commit 533f16a192ff11cbc5fa92643780155e50dcab60
Author: alsy <@qq.com>
Date: Sat Mar :: + add some modified commit 71b53372b30d69648a4c2516d73fa3563197ec08
Author: alsy <@qq.com>
Date: Sat Mar :: + second commits commit 91c0959fab89f5a612db84f047bf13afb1162a26
Author: alsy <@qq.com>
Date: Sat Mar :: + first commit
可以看到我们已经把修改 commit 到分支了,这时我们可以采用两种方式来撤销
(1) git revert [ HEAD | commit-ish ]
$ git revert HEAD
[master e1f8ce3] Revert "add some modified"
file changed, deletion(-) $ git log
commit e1f8ce3351bd1bf0e2532c8f1e227c995bbc48e0
Author: alsy <@qq.com>
Date: Sat Mar :: + Revert "add some modified" This reverts commit 533f16a192ff11cbc5fa92643780155e50dcab60. commit 533f16a192ff11cbc5fa92643780155e50dcab60
Author: alsy <@qq.com>
Date: Sat Mar :: + add some modified commit 71b53372b30d69648a4c2516d73fa3563197ec08
Author: alsy <@qq.com>
Date: Sat Mar :: + second commits commit 91c0959fab89f5a612db84f047bf13afb1162a26
Author: alsy <@qq.com>
Date: Sat Mar :: + first commit
可以看到 git revert 是生成一个新的提交来撤销某次提交,此次提交之前的 commit 都会被保留
(2) git reset [ --soft | --mixed | --hard ] [ HEAD^ | commit-sh ]
- --soft
保留源码,只回退到 commit 信息到某个版本,不回退暂存,如果还需要提交,直接commit即可。
- --mixed
保留源码,回退 commit 和暂存信息到某个版本。
git reset 默认是 --mixed 模式
git reset --mixed 等价于 git reset
- --hard
源码也会回退到某个版本,commit 和 index 都会回退到某个版本。
$ echo 'some modified ~' >> a.txt $ git commit -a -m 'git reset test' $ git log
commit 7c7c69f2b891b4368fd4d59c31827793e41ceac5
Author: alsy <@qq.com>
Date: Sat Mar :: + git reset test commit e1f8ce3351bd1bf0e2532c8f1e227c995bbc48e0
Author: alsy <@qq.com>
Date: Sat Mar :: + Revert "add some modified" This reverts commit 533f16a192ff11cbc5fa92643780155e50dcab60. commit 533f16a192ff11cbc5fa92643780155e50dcab60
Author: alsy <@qq.com>
Date: Sat Mar :: + add some modified commit 71b53372b30d69648a4c2516d73fa3563197ec08
Author: alsy <@qq.com>
Date: Sat Mar :: + second commits commit 91c0959fab89f5a612db84f047bf13afb1162a26
Author: alsy <@qq.com>
Date: Sat Mar :: + $ git reset --hard HEAD^
HEAD is now at e1f8ce3 Revert "add some modified" $ cat a.txt
some modified
git revert 是用一次新的 commit 来回滚之前的 commit,git reset 是直接删除指定的 commit。
7. 分支的管理
a. 创建分支
使用 git branch <branch_name> 来创建一条新的分支
$ git branch dev $ git branch
dev
* master
我们在 master 基础上创建了一条 dev 分支,git branch 命令可以帮助我们查看所有的本地分支,并且在当前分支前带有 * 号标记
b. 切换分支
使用 git checkout <branch_name> 来切换分支
$ git checkout dev
Switched to branch 'dev' $ git branch
* dev
master
看到我们已经处于 dev 分支上了
c. 合并分支
现在我们在 dev 分支上做一些修改
$ echo 'some modified on dev' >> a.txt $ git commit -a -m 'some modified on dev'
我们要将 dev 分支上的代码合并到master,使用 git merge <branch_name> 来合并分支
$ git checkout master
Switched to branch 'master' $ git merge dev
Updating e1f8ce3..0209ed1
Fast-forward
a.txt | +
file changed, insertion(+) $ cat a.txt
some modified some modified on dev
可以看到此时 dev 上的修改已经到 master 上了
8. 远程仓库
远程仓库其实和本地仓库一样,只不过是作为一个代码提交、共享的平台,一般也不会有人直接在上面做提交修改。github 是免费 git 仓库的托管平台,我们可以在 github 创建一个仓库作为我们的远程仓库。当然我们也可以自己搭建 git服务器,来创建我们的远程仓库。以 github 为例:
a. 创建ssh key :
$ cd ~/.ssh/
$ ls
github_rsa github_rsa.pub id_rsa id_rsa.pub
看看这个目录下有没有 id_rsa 和 id_rsa.pub 这两个文件,如果没有则执行以下命令来创建:
$ ssh-keygen -t rsa -C "youremail"
id_rsa 是私钥, id_rsa.pub 是公钥,我们需要把公钥添加到 github , 把 id_rsa.pub 里面的内容添加到 github 上:
这样我们才有权限去推送代码
b. 创建远程仓库
c. 本地关联远程仓库
我们可以根据 github 上给出的提示来与远程仓库进行关联,即:
$ git remote add origin https://github.com/2944927590/node-practice.git $ git push origin master
Counting objects: , done.
Delta compression using up to threads.
Compressing objects: % (/), done.
Writing objects: % (/), 1.03 KiB | bytes/s, done.
Total (delta ), reused (delta )
To https://github.com/2944927590/node-practice.git
* [new branch] master -> master
我们可以使用 git push --set-upstream origin master 让本地的 master 分支与远程仓库的 master 分支建立连接,这样我们可以直接使用 git push 来将本地 master 分支代码推送到远程 master 分支
$ git push --set-upstream origin master
Branch master set up to track remote branch master from origin.
Everything up-to-date $ git push
Everything up-to-date
d. 拉取最新代码
git pull 命令来拉取远程仓库的最新代码到本地,这里需要指出 git pull 相当于 git fetch(取下更改) 和 git merge (合并到本地分支)两条命令
$ git pull
Already up-to-date.
9. Git 设置别名
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.st status
$ git config --global alias.lg log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
这样 git checkout 等命令可以用 git co 等代替了,当然你可以对其他命令设置别名。
10. 实际开发中的分支
一般我们在项目开发中,会有一个 master 分支作为整个项目的主分支,也就是实际上线的代码分支;同时可能还会有一个 dev 分支,作为开发环境的代码分支;有的还会有一个 qa 分支,作为测试环境的代码分支;我们都是在为这三条分支服务。比如我们接到新的需求,开始创建分支,首先切到 master 分支,git pull 拉取最新的代码,创建一个自己的开发分支 task , 我们在 task 分支上开始写我们的代码,merge 到 dev 分支进行开发调试,merge 到 qa 分支进行测试,最后 merge 到 master 分支上线。
拓展阅读
更多精彩内容,欢迎关注微信公众号~
强大的版本管理工具 Git的更多相关文章
- linux系统下使用流行的版本管理工具 Git
前几天被版本管理困扰了好久,主要是因为 没法回到之前的版本,新版本又出了问题真的很尴尬. 终于决定使用目前网上很火的版本管理工具-------Git 历史啥的就不说了,说些有用的. 我用的是oschi ...
- 版本管理工具Git(1)带你认识git
简介 本篇将带领大家认识,git.github,让大家对git有基本的认识:下面将持续更新几篇文章来介绍git,见git导航: 下一篇中将讲解git的安装及使用: Git系列导航 版本管理工具Git( ...
- 版本管理工具Git(2)git的安装及使用
下载安装git 官方下载地址:https://git-scm.com/download/win 这里以windows为例,选择正确的版本: 验证是否安装成功,右键菜单中会出现如下菜单: Git工作流程 ...
- 版本管理工具Git(一)简要介绍
版本管理工具不但可以备份而且还能记录版本,也就是同一个东西不同时期的状态同时可以跟踪追溯.版本管理工具由CVS.SVN.Git.GitHub. 最早的版本管理工具CVS,因为多人开发项目导致工作很难协 ...
- 版本管理工具Git(2)git的使用
上一篇带大家认识了Git,在本篇中将讲解Git的安装及使用: Git系列导航 版本管理工具Git(1)带你认识git 版本管理工具Git(2)git的安装及使用 版本管理工具Git(3)VS下如何使用 ...
- 版本管理工具Git(3)VS2013下如何使用git
Git系列导航 版本管理工具Git(1)带你认识git 版本管理工具Git(2)git的安装及使用 版本管理工具Git(3)VS下如何使用git VS下创建项目 vs中新建项目MyGitTest201 ...
- 版本管理工具git与svn简介
版本管理工具 版本管理工具简介 常见版本管理工具 cvs(Concurrent Versions System) vss(Visual SourceSafe) svn 常用的版本管理工具 git 流行 ...
- Studio之版本管理工具Git (图文教程)
目前业界主流的版本管理工具主要是 svn/git.svn是1种集中式的代码管理工具,而git是1种散布式的代码管理工具,广受极客的爱好.而基于git的github更是全宇宙码农的提高逼格,深究技术的必 ...
- 谈谈分布式版本管理工具Git
一.主流的版本管理工具 目前在企业中比较主流的版本管理工具有:GIT.SVN.CVS等等. 二.什么是Git? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.是 L ...
随机推荐
- C++编程练习(16)----“排序算法 之 快速排序“
快速排序 基本思想: 通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的. 算法介绍: 设要排序的 ...
- 一次dns缓存引发的惨案
时间2015年的某个周六凌晨5点,公司官方的QQ群有用户反馈官网打不开了,但有的用户反馈可以打开,客服爬起来自己用电脑试了一下没有问题,就给客户反馈说,可能是自己网络的问题,请过会在试试.早点8点,越 ...
- Linux系统(三)系统基础扫盲大全
序言 如果大家都爱装逼,一般会偏爱使用安装最小化的liunx系统,那么你的系统就不带图形化的桌面功能,这样对于一个想装B的初学者来说,Liunx就是黑漆马虎,一望无际的黑屏,黑屏,如何快速的对liun ...
- Hbase数据库安装
一.环境准备 1.Ubuntu14.04-server 2.ssh 3.jdk1.6 4.hbase-0.98.19-hadoop2-bin.tar.gz(下载地址http://www.apache. ...
- 正则表达式中的match,test,exec,search的返回值
今天突然被问到了正则表达式,因为长时间不用突然不知道怎么用了,只知道有这么个东西.然后去网上查了一下,感觉写的不少,但解释的有点模糊,今天我来浅谈一下. 1,match的用法 A,在不加全局“g”的情 ...
- SpringMVC总结的部分教程及使用方法
注:本文只用注解来实现 SpringMVC各种流程图流程图(其他的各种流程图)jsp.xml.action彼此之间的关系,都如何使用spring-mvc.xml如何配置,放在哪里?action中如何转 ...
- 访问内网中的sql server数据库的简便方法
前言: 有时候我们要访问局域网内的 sql server服务器,比如测试环境数据库在公司内网,回到家或在客户现场要连接内网中的数据库 第一步:假如可以连接局域网的数据库 192.168.150.129 ...
- 构建Docker平台【第二篇】安装 Docker
第一步:上传安装包和 docker 镜像 1.安装包: docker-engine-1.12.1-1.el7.centos.x86_64.rpm docker-engine-selinux-1.12. ...
- Angular.js之服务与自定义服务学习笔记
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 每天一个linux命令(28)--gzip命令
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip 是在Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.gzip 不仅 ...