Git版本管理原理简析及使用方法速成

最近在系统地学习使用Git,并了解Git进行版本控制的原理,以更好地学以至用。html

如下是学习过程当中整理的知识点总结。linux

1 安装及配置(windows)

1. 官网下载安装Gitgit

  1. 开始菜单找到git → git bash(或者在某个文件夹下面 右键 -> git bash here)github

  2. 配置/修改用户信息 $ git config --global user.name "Your Name"  // --global参数表示全局配置,也能够针对不一样仓库配置不一样用户名和email $ git config --global user.email "email@example.com" 查看用户信息: $ git config --global user.name $ git config --global user.emailvim

2 建立一个Git仓库

$ mkdir learngit  // 新建一个文件 $ cd learngit  // 进入文件 $ git init  // 把文件目录变成git仓库windows

在learngit下新建文件readme.txt $ git add readme.txt  // 将文件添加到仓库 $ git commit -m "add readme file"  // 提交文件bash

3 版本管理

3.1 提交文件

修改readme.txt文件 $ git status  // 查看当前状态 $ git diff  // 查看修改的内容 $ git add filename $ git commit -m "some describe for this commit"app

3.2 版本回退

$ git log  // 查看日志 $ git log --pretty=oneline  // 一条记录显示在一行 $ git reset --hard HEAD^  // 回到上一个提交,HEAD^^回到上上个提交, $ git reset --hard HEAD^^  // 回到上上个提交 $ git reset --hard 8adc  // 回到commit id开头为8adc的版本 $ git reflog  // 查看操做记录ssh

4 工做原理

一个git目录能够分为两个部分:编辑器

  • 工做区:能看到的文件
  • 版本库:.git文件里,不可见

版本库包含暂存区stage、master分支(包含一个HEAD指针)。 提交文件必须先提交到stage再提交到分支上。 $ git add filename  // 将工做区的文件提交到stage $ git commit -m "..."  // 将stage区的文件提交到分支上 $ git diff HEAD -- filename  // 查看工做区和分支上代码的区别

图片.png

5 撤销修改

  • 工做区:git checkout -- filename  // 清理工做区(距离上次add或commit后所作的修改)

  • stage: 1. git reset HEAD filename  // stage → 工做区(把上次add但未提交的stage中的内容打回工做区) 2. 清理工做区

  • 分支: git reset --soft HEAD^  // HEAD^表示上一个版本,也能够写做HEAD~1;soft表示不删除工做区改动代码,撤销commit,不撤销git add .;harg表示删除工做区改动代码,撤销commit,撤销git add . git commit --amend  // 只修改注释,进入vim编辑器,修改完注释后保存便可

6 删除文件

新建一个文件test → add → commit 此时git分支保存了新文件test,删除文件的几种方式以下:

  • $ rm test.txt → add → commit
  • 或者在文件夹手动删除test.txt → add / (git rm filename) → commit
  • $ git rm test.txt → commit

恢复文件的方法同【撤销修改】

7 远程仓库

7.1 添加远程库

添加远程仓库须要两步操做:本地生成SSH Key添加到远程仓库、本地仓库与远程仓库关联。

1.建立SSH Key $ ssh-keygen -t rsa -C "your@email.com"  // 生成一个公钥id_rsa.pub和一个私钥id_rsa $ cd ~  // 进入用户主目录 $ cd .ssh $ ls  // 列出全部文件 $ cat id_rsa.pub  // 查看文件内容 复制内容到 git/github -> Account Setting -> SSH -> 粘贴

2.关联远程仓库 git/github建立仓库 $ git remote add origin github.com/example/lea…  // 本地仓库关联远程仓库 $ git push -u origin master  // 推送本地仓库到远程仓库master分支 -u表示第一次推送 $ git push origin master  // 后续推送到远程分支

以上失败时: $ git remote rename oroigin old-origin $ git remote add origin git @.../project-name.git $ git push -u origin --all

7.2 克隆远程仓库

git/github新建仓库 → Clone or download →  复制连接(HTTPS or SSH) $ git clone git@github.com:example/gitskills.git $ cd gitskills

克隆到本地后的仓库只有master分支,须要新建dev分支并和远程分支关联 $ git checkout -b dev origin/dev $ git branch --set-upstream-to=origin/dev dev

Git支持多种协议,默认的git://使用ssh,但也可使用https等其余协议 使用https速度慢,每次推送都必须输入口令,可是在某些只开放http端口的公司内部就没法使用ssh协议而只能用https

若是在git上新建了一个分支,只需在本地运行: $ git fetch $ git checkout branchName

8 分支管理

8.1 建立与合并分支

查看分支:git branch 建立分支:git branch 切换分支:git checkout 建立+切换分支:git checkout -b 合并某分支到当前分支:git merge 删除分支:git branch -d 强行删除:git branch -D

分支开发策略:master用来发布新版本 dev用来开发 在dev上新建分支开发,完成后合并到dev分支,再新开分支

8.2 解决冲突

8.2.1 merge冲突

若是两个分支同时修改了一个文件,merge的时候会冲突 $ git merge feature1 在IDE里解决完冲突 → add → commit (此时master就是修改后的,feature1是修改前的) $ git checkout feature1 $ git merge master  // feature1和master同步了,此时不会冲突

合并分支策略 $ git merge dev  // Fast forward模式,将master指针指向dev的最新一次commit,此时master和dev的commit id相同 $ git merge --no--ff -m "提交信息" dev  // 禁用Fast foward模式,merge时会生成一个新的commit

8.2.2 push冲突

当同时修改了同一个文件时会致使git push失败,必须先git pull → 解决冲突 →  git push git pull若是提示no tracking information说明没有建立本地分支与远程对应分支的连接关系,经过如下方式设置: $ git branch --set-upstream-to=origin/dev dev  // 本地分支dev关联远程分支origin/dev 再git pull

8.3 stash

git stash用于将“修改过的被追踪的文件和暂存的变动”及stage和工做区的修改暂存起来。

stash的范围: Changes to be committed(stage) Changes no staged for commit(工做区)

$ git stash  // 存档当前的改动并清理工做区和stage $ git stash list  // 罗列全部的存档 $ git stash apply  // 读取最近的一次存档 $ git stash apply stash@{0}  // 指定读取某次存档 $ git stash drop  // 删除存档 $ git stash pop  // 读取并删除最近一次存档

8.4 rebase

这部份内容的参考教程: gitbook.liuhui998.com/4_2.html git-scm.com/book/zh/v1/…

步骤 图示
假设有两个分支:master、experiment
切换到experiment分支执行rebase
$ git checkout experiment
$ git rebase master
取出experiment分支上的提交C4接到master分支上的最新提交C3后面,将experiment指向C4'。此时experiment分支的进度是最新的,而master分支无变化。
rebase时若是出现了冲突:
打开IDE解决冲突
$ git add .
$ git rebase --continue
若是要终止rebase:
$ git rebase --abort
切换到master分支执行merge $ git checkout master $ git merge experiment
此时master将指向最新的commit

9 标签管理

能够给每次commit打一个标签来增长辨识度。

$ git tag v1.0  // 给当前分支的最新提交打标签 $ git tag v0.9 commitid  // 给某次commit打标签 $ git tag -a v0.1 -m "version 0.1 released" commitid  // 给某次提交建立带有说明的标签 -a指定标签名 -m指定说明文字 $ git tag  // 查看全部标签 $ git show v0.9  // 查看某个标签的详细信息 $ git push origin v1.0  // 将某个标签推送到远程 $ git push origin --tags  // 将所有本地标签推送到远程 $ git pull origin --tags  // 拉取远程标签 $ git tag -d v0.1  // 删除本地某个标签 删除远程标签: $ git tag -d v0.9 $ git push origin :refs/tags/v0.9

10 其余经常使用命令

$ git log --graph --pretty=oneline --abbrev-commit  // git log --graph查看分支合并图 $ git remote  // 查看远程命名 $ git remote -v  // 查看远程库信息 $ pwd  // 显示当前文件路径 $ ls  // 查看该目录下的全部文件 $ cat filename  // 查看文件内容 $ vi filename  // 进入文件编辑模式

Reference

学习参考教程:www.liaoxuefeng.com/wiki/001373…

Linux命令大全:www.runoob.com/linux/linux…

相关文章
相关标签/搜索