Git基础
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git与SVN区别
- 1、GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
- 2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
- 3、GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
- 4、GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
- 5、GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
文章目录
一、Git安装配置
二、Git基本操作
三、Git分支管理
四、Git.远程仓库
一、Git安装配置
Git目前支持Mac、Windows、Linux/Unix和Solaris平台。
各平台安装包下载地址:http://git-scm.com/downloads
Windows平台安装
下载安装包之后根据提示进行安装
安装完成后就可以使用命令行的git工具了(自带ssh客户端),和一个带图像界面的git项目管理工具(Git GUI)。
可以通过桌面图标或者开始菜单找到->"Git"->"Git Bash",点击会弹出Git命令窗口,可在该窗口进行Git操作。
Mac平台下的安装
1.下载git客户端,地址:https://git-scm.com/download/mac
mac平台下的图像化git安装工具,地址:http://sourceforge.net/projects/git-osx-installer/
2.打开安装包,进行安装。
Linux平台安装
Linux操作系统git安装命令参考:https://git-scm.com/download/linux
- Ubuntu安装命令:
$ apt-get install git
- 若提示需要权限则输入:
sudo passwd root
,首先输入登陆密码,然后设置新的root密码,接着输入su
按Enter
键,输入设置好的root密码获取root权限。
安装过程需要输入几次y
+回车
,之后等待自动下载安装。
- 输入
git --version
查看git版本
安装完成
二、Git基本操作
配置用户信息
- 以下两条命令用于配置个人用户名称和电子邮件地址:
git config --global user.name "XXX"
git config --global user.email xxxx@gmail.com
--global:添加了此命令,那么更改的配置文件就是位于用户主目录下的,以后的项目都将默认使用此用户信息。若需要为某个项目使用其他用户信息,只需要去掉--global重新配置即可,新的配置保存在当前项目的.git/config中。
- 查看配置信息命令:
git config --list //也可以将--list换为具体的某个环境变量如:user.name
创建仓库
Git的很多命令都需要在Git仓库中运行,所以我们最先做的就是创建一个仓库。
- 我们可以使用一下命令将当前目录作为git仓库,并初始化:
git init
- 或者使用指定目录作为仓库:
git init newrepo
- 初始化后,目录下会生成一个名为.git的目录,我们要将当前目录下的几个文件纳入git版本控制下,需要先用git add让git对文件开始跟踪,之后提交。
git add *.c //将以.c结尾的文件提交到仓库
git add README //将README文件提交到仓库
git commit -m '初始化项目版本'
克隆仓库
使用git clone命令从现有Git仓库中拷贝项目,类似于svn checkout。
- 克隆仓库的命令:
git clone <repo> //repo:Git仓库地址
- 克隆到指定目录:
git clone <repo> <directory> //directory:本地目录
基本快照
Git 的工作就是创建和保存你的项目的快照及与之后的快照进行对比。
git status
git status 可以查看在你上次提交之后是否有修改。
- 使用git status命令查看项目当前状态:
git status -s //-s:简短输出
??: 未添加到缓存
A: 已添加到缓存
M: 有改动
AM: 添加到缓存后又有改动
git diff
git status 显示你上次提交更新后的更改或者写入缓存的改动, 而 git diff 一行一行地显示这些改动具体是啥。
- 使用git diff命令查看git status执行结果的详细信息:
git diff //尚未缓存的改动
git diff --cached //已缓存的改动
git diff HEAD //已缓存和未缓存的所有改动
git diff --stat //显示摘要
git commit
使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中。
- 将内容添加到仓库:
git commit -m '第一次提交版本'
-m:提交注释,如果不设置-m选项,那么git会尝试打开一个编辑器以填写提交信息,默认vim。效果如下:
- 如果觉得git add提交缓存比较麻烦,也可以使用-a跳过:
git commit -a
git commit -am '第二次提交版本'
git reset HEAD
git reset HEAD 命令用于取消已缓存的内容。
git reset HEAD //也可以使用 --文件名 的形式指定具体文件
git rm
git rm 会将条目从缓存区中移除。这与 git reset HEAD 将条目取消缓存是有区别的。 git reset HEAD是将缓存区恢复为做出修改之前的样子。git rm file 会将文件从缓存区和你的硬盘中(工作目录)删除。
- 不从工作区删除文件:
git rm --cached 文件名
git mv
git mv 命令做得所有事情就是 git rm --cached 命令的操作, 重命名磁盘上的文件,然后再执行 git add 把新文件添加到缓存区。
git mv 原文件名 修改后文件名
三、Git分支管理
几乎每种版本控制系统都支持类似的分支,使用分支从开发主线中分离,在不影响主线的同时继续工作。Git的分支模型是最赞的
- 创建分支命令:
git branch (branchname)
- 切换分支命令:
git checkout (branchname)
切换分支时,Git会用该分支最新的快照替换工作目录的内容,所以多个分支只需要一个目录。
- 列出分支命令:
git branch //没有参数时,会列出本地的分支
当执行git init 时,Git会默认创建"master"分支。
当我们创建了一个分支,在该分支的的上下文中新增删除了一些文件后,切换回主分支,那些修改的东西都不见了。
使用分支就可以让我们在不同的上下文中工作,来回切换,而不影响主线。
- 删除分支命令:
git branch -d (branchname)
- 合并分支命令:
git merge
合并冲突
合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。
我们可以在master分支中创建文件test.txt,并写入github.com
,提交到仓库。
然后创建一个change_site分支,并切换过去。
git branch change_site
git checkout change_site
修改test.txt文件内容为 https://github.com
,提交后切换回master分支。
git commit -am 'merge test 1'
git checkout master
将change_site分支合并到master分支。
git merge change_site
此时会提示我们文件冲突,需要我们手动修改。
修改完成后可以通过git add告诉Git文件冲突已解决。
git add test.txt
git commit
Git查看提交历史
在提交了多次更新后,想要查看提交历史,可以使用以下命令:
git log
输出结果:
查看历史记录简介版本:
git log --oneline
输出结果:
使用--graph查看什么时候出现了分支、合并:
git log --oneline --graph
输出结果:
其他log命令:https://git-scm.com/docs/git-log
--reverse 逆向显示日志
--author 指定具体某一个作者
--since 和 --before 指定日期
--decorate 查看标签
Git 标签
如果你想要记住或标记某个重要的快照,就可以使用标签。
- 比如我们提交了项目v2.0版本,可以使用以下命令:
git tag -a v2.0
- -a是创建一个带注解的标签,记录标签作者、生成时间等.
- 使用了-a,Git会打开一个编辑器让你输入标签注解,就和写提交注解一样。
- 使用命令
git tag
可以查看所有标签。 - 如果想给已提交的某个快照追加标签,可以使用如下命令:
git tag -a v1.0 64ff8e3 //64ff8e3是上图日志最后一行
快速指定标签信息:
git tag -a v3.0 -m 'author:噫那里有条咸鱼'
四、Git远程仓库(Github)
添加远程仓库
由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:
1.创建ssh
- 检查ssh
打开终端,运行cd ~/.ssh
如果路径下无文件跳过下一步操作,如果有文件代表已有ssh key,需要进行备份 - 备份已有ssh
mkdir key_backup
mv id_rsa* key_backup
- 生成ssh key
ssh-keygen -t rsa -C xxxx@gamil.com //注册的main邮箱
执行后终端会显示
2.将ssh key添加到github上
- 在终端输入,mac平台:
open ~/.ssh id_rsa.pub
,Windows平台:start ~/.ssh id_rsa.pub
,打开文件id_rsa.pub,拷贝key值。 - 打开https://github.com/官网,登录后,点击账户-ssh公钥,输入拷贝的key值,提交。
3.测试链接是否成功
- 在终端输入
ssh -T git@github.com
这里会要求你输入SSH key密码,如果刚才生成SSH key时未输入密码,密码就为空。 - 看到:
Hi 用户名! You’ve successfully authenticated
说明配置成功。
配置成功后SSH会由黑色变为绿色。
4.New repository(新建仓库)
登录Github点击New repository
,之后在repository name
填入test(远程仓库名),其他设置默认即可,之后点击Create repository
,就成功创建了一个Git仓库。
5.本地上传文件到远程库
依次执行以下命令:
mkdir test //创建测试目录
cd test //进入测试目录
echo "git测试" >> README.md //创建README.md文件并写入内容
git init //初始化
git add README.md //添加文件到缓存
git commit -m "添加 README.md 文件" //提交并添加备注
git remote add origin git@github.com:账户名/仓库名 //提交到远程仓库
git push -u origin master
查看远程库
实例:-v参数—— 查看每个别名的实际链接地址
$ git remote
origin
$ git remote -v
origin https://github.com/账户名/test (fetch)
origin https://github.com/账户名/test (push)
提取远程仓库
- 从远程仓库下载新分支与数据:
git fetch
- 从远程仓库提取数据并尝试合并到当前分支:
git pull
当我们需要提取更新的数据,可以先执行 git fetch[别名]
让Git去获取本地没有的数据,然后执行git merge[别名]/[branch]
将更新的数据合并到当前分支。
实例:
通过在线修改README.md文件:
在本地提取更新:
将更新同步到本地:
查看README.md文件内容:
删除远程仓库
- 删除远程仓库命令:
git remote rm [别名]
实例:
新建仓库origin2:git remote add origin2 git @github.com:别名/test
查看仓库:git remote -v
删除仓库origin2:git remote rm origin2
Git命令练习:点我
2017-04-07 施工ing