Git的本质上其实是一个版本控制系统,在日常的开发管理工作中扮演着很重要的角色。当你需要和同事协同开发项目时,你需要他;当你需要一个良好的版本管理工具的时候,你需要他。与其他 版本控制工具相比,Git拥有简单、高效、分布式等特点,这一系列优质特性,使得Git被广泛使用。在工作求职的过程中没有人会问你是否会使用Git,但这是一个必备的工作技能!
在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。
Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方式。 从概念上来说,其它大部分系统以文件变更列表的方式存储信息,这类系统(CVS、Subversion、Perforce、Bazaar 等等) 将它们存储的信息看作是一组基本文件和每个文件随时间逐步累积的差异 (它们通常称作 基于差异(delta-based) 的版本控制)。
Git 不按照以上方式对待或保存数据。反之,Git 更像是把数据看作是对小型文件系统的一系列快照。 在 Git 中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。 为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流。
这是 Git 与几乎所有其它版本控制系统的重要区别。 因此 Git 重新考虑了以前每一代版本控制系统延续下来的诸多方面。 Git 更像是一个小型的文件系统,提供了许多以此为基础构建的超强工具,而不只是一个简单的 VCS。
现在请注意,如果你希望后面的学习更顺利,请记住下面这些关于 Git 的概念。 Git 有三种状态,你的文件可能处于其中之一: 已提交(committed)、已修改(modified) 和 已暂存(staged)。
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交表示数据已经安全地保存在本地数据库中。
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。
工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。
基本的 Git 工作流程如下:
在工作区中修改文件。
将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。
如果 Git 目录中保存着特定版本的文件,就属于 已提交 状态。 如果文件已修改并放入暂存区,就属于 已暂存 状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是 已修改 状态。
git --version
由于之前已经安装过一次Git,所以显示了版本号,没有版本号就是还没有安装。
为了演示如何安装我先卸载掉之前安转的版本。
yum remove git
这里利用centos自带的yum工具(类似于应用商城)直接执行下面命令就可以安装git了,一键操作非常方便,但是也存在一个问题,git的版本通常都不是最新的版本!!!
yum -y install git
上面的方法不能一键安装最新版本的git,那么还可以采取源码编译的方式来安装,简直就是强迫症患者的福音,给你一步到位最新版本!
sudo:以管理员身份运行,是root用户则可以忽略
sudo yum install -y wget
sudo yum install -y gcc-c++
sudo yum install -y zlib-devel perl-ExtUtils-MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.0.tar.gz
#解压进入对应目录
tar -zxvf git-2.9.0.tar.gz
cd git-2.9.0
./configure --prefix=/usr/local
make
sudo make install
git --version
你以为到这里就结束了?然而,我只能说一句stay foolish,stay hungry啦!大概率查看版本的时候你会得到一个和我一样的结果,查不到版本号!!!
整活了大半天,又是下载依赖又是编译安装的就这结果?你是什么博主啊,我要取关!
然而事情并没有结束,机智的博主在查阅了一堆资料后(百度、Google…)发现,只需要一步就能解决问题——重新打开一个session(服务器命令窗口)或者重启服务器。
原来,事先卸载的旧的git路径为/usr/bin/git,然后新安装的git在/usr/local/bin下,终端session保存了原来的路径,重新打开新的终端即可解决!!!
想的这么周到的博主还不帮我点点赞和关注吗?
https://git-scm.com/downloads
真不是我偷懒,真就这么简单…
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
#用户名
git config user.name
#邮箱
git config user.email
ssh-keygen -o
git clone ssh_address
地址直接在项目下载的地方copy过来即可,一顿操作就得到了第一个git本地仓库。
git status
命令查看状态#将文件从工作区提交到暂存区
git add file_name
#将文件从暂存区提交到本地仓库目录
git commit -m "info"
#将文件修改从本地仓库同步到远程仓库
git push -u origin master
安装git后
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
$ ssh-keygen -t rsa -C "[email protected]" 创建ssh key,用于和github通信
(秘钥存储于C:\Users\27634\.ssh,把公钥id_rsa.pub存储于github)
创建版本库
$ pwd 命令用于显示当前目录(没啥用)
$ git init 把这个目录变成Git可以管理的仓库(后续新建提交和ssh克隆需要)
操作版本库
$ git add 文件名 添加文件(新增或者更改都需要先add)
$ git commit -m "说明" 提交到本地版本库
$ git status 查看仓库状态
$ git diff 文件名 查看修改的地方
版本回退(从一个commit恢复)
$ git log 查看版本历史
$ git reset --hard HEAD^ 回退到上个版本
$ git reset --hard 1094a 回退到特定版本号(commit以后回退)
$ git reflog 记录每一次命令
$ git checkout -- file 直接丢弃工作区的修改(add以前回退)
$ git reset HEAD <file> 添加到了暂存区时,想丢弃修改(add以后回退)
删除文件
$ git rm file(已经add/commit,在目录中删除)
$ git checkout -- file 删错了回退
远程仓库
$ git remote add origin git@server-name:path/repo-name.git 关联远程库
$ git push -u origin master 第一次的push
$ git push origin master 常用的push,本地分支会在服务器上新建分支
$ git pull 需要有关联的分支,第一次下拉最好新建一个空文件夹
$ git branch --set-upstream-to=origin/远程分支 本地分支 关联分支
$ git clone git@server-name:path/repo-name.git 克隆(不需要另建文件夹)
分支
$ git branch -a 查看所有分支
$ git branch -vv 查看分支关联
$ git branch dev 创建分支
$ git checkout dev 切换分支
$ git merge dev 合并某分支到当前分支
$ git merge --no-ff -m "msg" dev 普通模式合并,合并后的历史有分支
$ git branch -d dev 删除分支
$ git checkout -b dev 创建并切换分支
合并分支,无法merge
$ git stash save 名字 暂存工作状态
$ git pull origin dev 拉下来
$ git stash list 查看已经暂存的状态
$ git stash pop stash@{0} 将暂存状态merge到当前分支
还有冲突时,手动修改文件,然后add/commit
$ git log --graph 分支合并图
bug分支issue
$ git stash 暂存工作状态
$ git stash list 查看暂存工作状态
$ git stash pop 恢复暂存状态并删除状态
开发分支feature
$ git branch -D <name> 强制删除未合并的分支
rebase
$ git rebase 本地未push的分叉提交历史整理成直线
标签
$ git tag 标签名 打在最新提交的commit上
$ git tag 查询所有标签
$ git tag 标签名 f52c633 给特定的commit打标签
$ git tag -a 标签名 -m "msg" commit的id 给标签设置说明
$ git show 标签名 查询标签内容
$ git tag -d 标签名 删除标签
$ git push origin 标签名 推送某个标签到远程
$ git push origin --tags 推送所有标签
$ git push origin :refs/tags/<tagname> 可以删除一个远程标签。