项目版本控制工具:Git


git

Git 是一种为项目做版本控制的工具。

安装 Git

macOS 系统使用 Homebrew 安装,执行:

brew install git

CentOS 系统 yum 安装,执行:

sudo yum install git2u
  1. 系统仓库中如果没有最新版本,需要先安装第三方仓库。
  2. 如果系统里已经包含了低版本的 Git,需要先将系统中的删除才能继续安装。

基本流程

仓库 repository

使用 Git 为项目做版本控制,需要首先为项目添加一个 Git 仓库。

git init

这个命令可以为项目初始化一个仓库,初始化只需要执行一次,它会在项目目录下创建一个 .git 目录,Git 会把它需要的东西存储在这个 .git 目录下,这其实就是项目的仓库。

暂存区 staging area

把对项目做的修改、先放到暂存区,然后再做提交。

把对某个文件的所有修改添加到暂存区:

git add <file>

把在某个目录下做的所有修改添加到暂存区:

git add <directory>

把做的所有修改与新文件添加到暂存区(不包含删除文件):

git add .

把所有东西都添加到暂存区(修改、新文件、删除文件):

git add -A

把做的所有修改还有删除添加到暂存区:

git add -u

提交 commit

提交,就修改保存到仓库中:

git commit

选项:

  • -a(–all):把所有修改与删除自动添加到暂存区然后提交,不包含未追踪文件。
  • -m(–message):设置提交信息。

e.g. 把所有修改自动添加到暂存区然后提交,并设置提交信息:

git commit -am 'message'

查看某条提交信息,可执行:

git show <提交 ID>

状态 status

查看工作树的状态:

git status

返回信息形态:

On branch master
nothing to commit, working tree clean

表示当前 master 分支,没有可提交的内容,即项目没有做什么修改。

Changes not staged for commit:

...

no changes added to commit (use "git add" and/or "git commit -a")

表示修改了文件但还没添加到暂存区。Changes not staged for commit 列出的是还没有放到暂存区的修改。no changes added to commit 表示还没有添加要提交的东西。

On branch master
Changes to be committed:

...

Changes to be committed 的意思是将要被提交的修改。

日志 log

查看提交日志,也就是用 Git 保存的项目的历史信息:

git log

单行显示:

git log --oneline

加上 --graph 选项查看历史,会为你标记出使用 --no-ff 选项以后的合并。

.gitignore

在项目中,不想用 Git 跟踪的文件可以列在 .gitignore 文件里。

检查 checkout

可以 Checkout 一个提交,或者一个分支:

git checkout <提交 ID 或者 分支>

checkout 命令后面加一个 -b 选项,如果要查看的分支不存在,就会给我们创建一个。

撤消提交 revert

使用 Rever 命令可以撤消之前做过的提交:

git revert <提交 ID>

重置提交 reset

使用 reset 命令可以进行重置。

重置提交:

git reset --hard <提交 ID>

重置之后,这个提交之后的所有提交都会被抹掉。

把修改提交到暂存区后也可以使用 reset 命令重置:

git reset

重置后,之前提交到暂存区的修改就会被取消。

也可以单独重置一个文件的提交:

git reset <文件>

清理 clean

清理,即把未跟踪的文件清理掉:

git clean -f

git commit –amend

如果要修改提交的信息,或者把新的修改加到刚做的提交中去,可以在 git commit 命令中添加 --amend 选项:

git commit --amend

如果不想编辑提交信息,可以再加一个 --no--edit 选项:

git commit --amend --no--edit

分支 branch

列出分支:

git branch

创建新的分支:

git branch <新分支>

切换分支:

git checkout <分支>

删除分支:

git branch -d

或者

git branch -D

重命名分支:

git branch -m <分支的新名字>

合并 merge

把两个分支合并,Git 有几种合并算法,Fast-Forward 合并,3-Way 合并:

git merge <分支>

分支修改提交后,主分支没有发生变化,这时把分支与主分支合并时,就是一个 Fast-Forward 合并。

合并时如果使用 --no--ff` 选项,表示不使用 Fast-Forward 合并,这样可以在历史里记录一下合并动作。

分支修改提交后,这期间主分支也做了部分修改,这时把分支与主分支合并时,就是一个 3-Way 合并。

远程仓库 remote

可以为项目创建一个远程仓库,然后把本地化险为夷推送到远程仓库上。

这里以 Github 为例。

Github

可以在 Github 上为项目创建远程仓库,公开的远程仓库是免费的,私有仓库要收费。

可以在 Github 账户设置中配置 SSH-KEY,这样在远程连接时就不需要输入密码了。

git remote

显示远程仓库:

git remote

详细显示,可以添加一个 -v 选项。

添加远程仓库:

git remote add 名字 地址

删除远程仓库:

git remote rm 名字

重命名远程仓库:

git remote rename 旧名字 新名字

例如我在 Github 上新建了一个名字是 git-test 的仓库,可以使用 git remote 命令添加远程仓库:

git remote add test git@github.com:85Ryan/git-test.git

test 是给远程仓库起的名字,地址是 git@github.com:85Ryan/git-test.git(可以在 Github 页面查看到)

git push

git push 可以把在本地对项目做的提交上传到远程仓库:

git push 远程 分支

将在本地的 master 推送到 test 这个远程仓库上:

git push -u test master

加上了 -u 选项以后,下面你再 push 的时候,可以直接执行:

git push

完成以后,刷新远程仓库页面,就能看到刚刚推送上来的项目了。

git clone

git clone ,能把远程仓库完整地复制一份,放到本地的某个目录的下面:

git clone 远程地址 本地目录

git fetch

git fetch 可以把远程仓库里的东西下载到本地:

git fetch 远程 分支

git pull

git pull 相当于 git fetch 以后,接着再 git merge。就是它把下载与合并这两个动作结合到一块儿了:

git pull 远程

远程如果是 test,当前所在分支是 master,那执行 git pull,就相当于:

git fetch test
git merge test/maste

rebase

git pull --rebase 远程

加了 --rebase 选项,会用 git rebase 代替 git merge

协作

使用 Git 大家可以一起协作开发一个项目,主要工作流程有以下几种:

#EOF