Git-分布式版本控制系统
一. 背景介绍
1.集中式-SVN
(版本,修改信息保存在中央服务器,问题:单点故障;)
只保存两个版本变化
2.分布式-Git
(整个工程特定时刻完整拷贝都down到本地)
保存每个版本完整部分,所有操作都可以本地完成,因为本地仓库。
二. Git三种状态(类似于form表单)
已修改modified(add)(工作区)—以暂存staged(commit)(暂存区)—已提交commited(本地仓库)-远程仓库
开发流程:
创建仓库(从远程仓库克隆)-创建并切换到特性分支-创建/修改文件-提交工作区文件到暂存区-提交暂存区文件到本地仓库
三.安装和免密码登陆
1.配置用户名和密码
两种连接方式:SSH和HTTP
ssh-keygen 产生ssh公钥和私钥
网页上profile settings添加
2.git clone 远程仓库地址 本地名字
Vim.gitignore可以添加想忽略上传到git的文件或者文件夹
四常用命令
init clone remote status log reflog config
add commit fetch pull push rm stash
Branch checkout merge diff reset revert
网页:gitlab.corp.qunar.com 点击菜单栏+号可以创建远程仓库
1.
git init 初始化
git remote add origin 远程仓库地址 将远程仓库与git init本地创建仓库关联
git remote -v
git remote —help可删除,可重命名。。。
git clone 克隆远程
2.
git status 显示工作区状态,经常使用
git add 文件名 可以将文件进行跟踪
git reset HEAD 文件名 可以撤回暂存区
git commit -m ’输入提交的记录‘
git push 推到远程库
git log只记录commit操作,与远程仓库同步,查看分支提交历史
git reflog 不会与远程同步,记录本地所有操作
3.
git config 修改配置信息
git config - -add user.name 新的名字
4.
git diff 显示不同提交,不同工作区域,不同分支之间的差别(默认显示工作区和暂存区区别)
git diff --staged/cached 暂存区和本地仓库区别
git branch -a 查看远程分支
git branch 显示存在分支
git diff 分支名 分支名 对比俩分支之间区别
git diff hash码前缀 hash码前缀 对比俩文件之间区别
git checkout 分支名 切换到某个分支
cat 文件名 查看文件信息
git add 工作区提交到暂存区
git commit 暂存区提交到本地仓库
git commit -am “描述文字”
git push 将本地仓库内容推送到远程仓库
git push -u origin branch2 指定推送到远程哪个分支下
5.
git pull 拉取远程仓库到本地仓库并合并到本地分支(git fetch +git merge)
git fetch 只是拉取,不会影响本地分支文件
git merge origin/branch2 可以合并分支,对本地有影响了
先要切换到需要操作的分支才可以操作,git checkout 分支名 git merge branch2 将branch2文件与checkout切换到分支文件合并,该merge以后操作需要push到远程仓库
git merge冲突
先push冲突后需要pull,然后比较文件区别,手动修改,HEAD本地分支文件 <<< === 远程分支文件 <<,需要重新add,commit,push
git merge --abort 将本次合并取消
6.
git branch 显示所有分支,带*为当前位于分支
git branch 分支名 新建分支
git branch -d 分支名 删除某一分支 ,更谨慎
git branch -D 分支名 强制删除
git branch -v 查看分支详细信息(分支名,最近一次提交版本号以及该次提交的描述信息)
git checkout 切换分支
git checkout -b 分支名 创建分支并切换
git checkout --文件名 可以将文件还原成本地仓库的样子
git checkout 版本号 文件名 将文件还原回某一版本状态下 commit之间版本
git checkout HEAD 文件名 最近一次提交
git checkout HEAD~ 文件名
git checkout HEAD~10 文件名
7.
git reset 重置HEAD到指定状态
git reset --mixed(默认) HEAD~ 将本地仓库上一个版本拷贝到暂存区
git reset --hard HEAD~ 将本地仓库上一版本拷贝到暂存区和工作区
git reset --soft HEAD~ 将HEAD指针指向上一版本,并不会进行拷贝
8.
git revert 版本号 撤销某次提交 revert操作被当作一次单独的提交保存,也就是提供hash数值
git reset --hard 版本号 会将这次提交之后所有操作删除,get log 提交历史都会将这些记录删除,不可逆
9.
git cherry-pick commitID 用于把某次提交的内容合并到当前分支
git log 找到 commitID 切换到master分支 git cherry-pick commitID
git cherry-pick continue 完成一次cherry-pick
10.
git rebase用于把一个分支的修改合并到当前分支
与git merge 分支区别 产生新的merge提交 提交历史是分叉合并相交的过程
git rebase 找到合并分支的祖先节点,线性
git rebase -i master(分支名) 交互式提交方法
git rebase --continue完成一次操作
git log --graph --online可以看到提交历史
11.
git hooks
git 工作流
推荐书籍:pro git