zoukankan      html  css  js  c++  java
  • Java开发工程师(Web方向)

    第5章--Git

    版本控制简介

    VCS (version control system) 版本控制系统:记录若干文件的修订记录的系统,帮助查阅/回到某个历史版本

    LVCS本地

    CVCS集中式(Central) -- e.g SVN (subversion), CVS (concurrent version system)。

    缺点,操作需要网络连接

    DVCS分布式 distribute -- e.g git   大部分操作可以在本地进行

     

    分支模型

    分支:从目标仓库获得一份项目拷贝,每条拷贝都有和原仓库功能一样的开发线

    分支模型(branching model)/工作流(workflow):一个围绕项目开发/部署/测试等工作流程的分支操作(创建/合并)规范集合

    特性分支:每个人开发不同的产品特性,之后分别与主线合并

    产品级的分支模型:

    常驻分支:

    production(master):默认分支 (产品分支):可发布的版本

    development:从master分支创建:开发的分支

    活动分支:

    feature:从development分支创建:特性分支

    hotfix:从master分支创建:线上bug修复 (在master分支(上线的产品)发现bug,创建hotfix分支进行修复,合并回master分支(同时也需要合并到development分支)

    release:从development分支创建:产品正式发布(可能会在发布结束之后被删除,因此在release分支的更新需要合并到development分支,发布前会推送到master分支并打上相应的版本号,产品上线)

     

    Git

    git是一个基于内容寻址的存储系统(属于DVCS)

     

    基本操作:

    git help <command>/ git <command> -h/ git <command> --help/ man git-<command>

    git config:配置git,在创建一个版本仓库之前就要完成的配置

    git config --global user.name "..."

    git config --global user.email ...

    (配置级别: 

    --local:只影响本仓库(.git/config)

    --global:影响到所有当前用户的git仓库(~/.gitconfig)

    --system:影响到全系统的git仓库(/etc/gitconfig)

    git init:初始化仓库,使当前目录成为一个git仓库

    git status:查看当前git仓库的信息

    git中的状态:

    内容状态:

    工作目录

    暂存区

    提交区

    文件状态:

    已跟踪

    未跟踪

    git add filename:跟踪文件

    git add . :跟踪所有文件

    .gitignore :在add时忽略匹配的文件,仅作用于未追踪的文件

    git rm:从暂存区和工作目录中删除(并取消跟踪)

    git rm --cached:从暂存区删除文件

    git rm $(git ls -files --deleted):删除所有被跟踪,但是在工作目录被删除的文件

    git commit:提交暂存区至提交区

    git commit -a:提交工作目录至提交区

    git log:显示提交记录

    git log --oneline:以一行信息来显示每一个记录

    git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset ...:特定格式显示

    git config alias.shortname <fullcommand> :alias

    e.g. git config -global alias.lg "log --color --graph --pretty............."

    git lg 即可

    git diff:工作目录与暂存区的差异

    git diff -cached [<reference>]:暂存区与某次提交的差异,默认为HEAD(HEAD指向当前的提交)

    git diff <reference>:工作目录与某次提交的差异

    git diff <reference1> <reference2>:两次提交之间的差异

    git checkout -- <file>:将文件内容从暂存区复制到工作目录(discard changes)

    git reset HEAD <file>:将文件内容从上次提交复制到暂存区

    git checkout HEAD -- <file>:将文件内容从上次提交复制到工作目录

     

    分支操作:

    git branch <branchName>:增加分支

    git branch -d <branchName>:删除分支

    git branch -v:显示现在所有的分支信息

    e.g. git branch next:在HEAD指针上创建另外一个引用

    (一个分支的引用只是一个文本文件(40字符的SHA-1编码)--git的分支是轻量级的

    所有分支文件都存在/.git/refs/heads/下,每一个分支对应一个文件)

    有了一个next分支后,使用git commit提交会发生什么呢?

    创建一个提交对象,HEAD和master会向前移动一步(next不动,因为未切换到next分支上)

    git checkout:用来移动HEAD(HEAD用于指向当前提交的版本),并会把当前的工作目录和暂存区恢复到移动到的版本,相当于是分支的切换

    git checkout <branchName>;

    git checkout -b <branchName>:直接创建一个分支并切换 -->git branch <branchName>; git checkout <branchName>

    git checkout <reference>:将HEAD移动到任意引用上(可传入commit id/ tag)

    当使用commit id移动HEAD时,如果该commit id没有branch的引用,则会出现detached head(不能写入,只能读取)

    git checkout - :回到上一个分支

    git reset commit_id:若要将当前分支回退到某个历史版本,三种方法:

    git reset --mixed <commit_id>:(默认)将当前内容复制到暂存区

    git reset --soft <commit_id>:保持暂存区和工作目录保持不变

    git reset --hard <commit_id>:将当前内容复制到暂存区和工作目录

    做完了版本回退,之前的提交就可能没有任何指针指向它了,便成为一个没有被索引的提交。如何重新找回呢?

    git reflog:按顺序显示commit的信息,尽快回退,不断向前,信息可能被覆盖

    表示捷径(不用commit的hash值)

    A^:A的父提交

    A~n:在A之前的第n次提交

    git stash:保存当前的工作目录和暂存区的状态,返回一个干净的工作空间

    git stash save 'msg':保存(隐藏的stash栈)

    git stash list:查看stash栈中保存的记录

    git stash apply stash@{number}:将记录重新恢复到工作目录上面

    git stash drop stash@{number}:将记录从stash栈中删除

    git stash pop <--> stash apply + stash drop top_record

    git merge:合并分支

    解决merge conflict:

    edit the conflict source code; git add; git commit -m 'resolved';

    git merge fast-forward -- 线性提交记录; git merge branchName --no--ff;

    git rebase branchName:修剪提交历史基线,俗称“变基”。将分支线路上的节点按顺序添加到所在分支之后--线性

    git rebase --onto:挑选一部分节点进行添加

    e.g. git rebase --onto master 5751363:将commit id为5751363之后的节点添加到master分支上

    git tag tagname commit_id:对某个提交设置一个别名

     

    远程操作:

    git支持本地协议,可以初始化一个本地的远程服务器(就可以不用github了)

    git init ~./git-server --bare:将当前仓库初始化为一个裸仓库(没有工作目录--被动接收的作用)

    git push:提交本地提交区到远程

    e.g. git push dir/git-server master

    配置远程映射,避免每次都输入长url:git remote

    git remote add origin ~/git-server:将远程仓库别名origin映射到仓库

    git remote -v:查看远程仓库信息

    多人使用git时:(case study)

    Jerry/master:git add f1; git commit; git push (abcd111)--> origin/master abcd111

    Tom/master:git add f2; git commit; git push (abce222) -->不可push

    需要先同步Tom/master和远程端的代码:git fetch(获取远程仓库的提交历史)

    e.g. Tom:git fetch origin/master; git merge origin/master

    then, git push origin master 即可提交到服务器

    git pull = git fetch + git merge

    完整获取远程仓库:git init(初始化) + git remote(配置仓库) + git pull(拉取到本地)

    git clone remote_addr local_dir:克隆一个远程仓库作为本地仓库(= git init + git remote + git pull)

     

    其他参考资料:

    git简明指南:http://rogerdudler.github.io/git-guide/index.zh.html

    Github教程:try.github.com

    Pro Git:http://git-scm.com/book/zh/v1/

     

    Git单元测验:https://my.oschina.net/iwinder/blog/779721

    Git单元作业:

  • 相关阅读:
    TextView中文文档
    低版本系统兼容的ActionBar(六)用Fragment+ViewPager+Tab实现快速导航
    低版本系统兼容的ActionBar(五)修改ActionBar的全套样式,从未如此简单过
    低版本系统兼容的ActionBar(四)添加Tab+添加自定义的Tab视图+Fragment
    低版本系统兼容的ActionBar(三)自定义Item视图+进度条的实现+下拉导航+透明ActionBar
    低版本系统兼容的ActionBar(二)ActionProvider+分离式ActionBar+分离式的ActionMode
    Android中获取屏幕长宽的方法
    低版本系统兼容的ActionBar(一)设置颜色+添加Menu+添加ActionMode
    用PopupWindow实现弹出菜单(弹出的菜单采用自定义布局)
    Android Studio 下载地址
  • 原文地址:https://www.cnblogs.com/FudgeBear/p/7247375.html
Copyright © 2011-2022 走看看