博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GIT分享收集
阅读量:3720 次
发布时间:2019-05-22

本文共 3309 字,大约阅读时间需要 11 分钟。

一、简介

          概况:2005年Linux之父Linus两周时间用C语言开发。目前,最先进的分布式版本控制系统。

          优势:①速度快;②完全分布式;③轻量级;④社区成熟活跃。

二、基础知识

          与传统VCS工具的对比

  (1)基础知识-第一次COMMIT

   (2)基础知识-多次COMMIT

   (3)基础知识--分支

  • 分支本质是指向单个commit的可变指针;
  • master分支不是特殊分支,只是约定的默认分支;
  • HEAD是一个特殊指针,指向当前活动分支的最新一次提交。

 

    (4)基础知识--标签(TAG)

  • 标签本质上是也是指向某个commit的指针,但是这个指针不能移动;
  • 标签可以方便的标记版本。

   (5)基础知识--区域划分

   

  • stash:储存区;
  • workspace/Working Directory:工作区;
  • Index/Stage:暂存区;
  • local repository:仓库区/本地仓库;
  • remote repository:远程仓库。

三、常见场景

编号 场景 命令
1 本地丢弃工作区修改 git checkout--<file>
2 将修改从暂存区回退到工作区

git reset HEAD<file>

git reset HEAD .//所有文件

3 push之前,撤销某一次commit

git reset commit-id //撤销此次commit修改还在

git reset --hard commit-id //撤销后放弃此次commit的修改

4 停止追踪文件

git rm --cached <file> //解除被追踪状态,但是工作目录中还会保存文件

git rm <file>-f //解除被追踪状态并且在工作目录中删除该文件

5 push之后回退

git revert commit-id //只撤销某次操作,不影响之前和之后的

commit,revert会把撤销作为新的commit提交,版本会递增

git reset commit-id //撤销某次提交,此后的修改都会被回退到暂存区。

三种模式:

--hard彻底撤销,不保留修改。暂存区和工作目录都会重置到你指定的提交;

--mixed回退版本库,暂存区。工作目录不会被改变;

--soft只撤销commit,暂存区和工作目录都不会被改变。例:git reset--hard commit-id

6 分支管理

git checkout-b hotfix //从当前分支创建hotfix分支,并切换到hotfix分支

git checkout-b hotfix master  //从master分支创建hotfix分支,并切换到hotfix分支

git branch  //查看所有的分支,带*号的是当前所在分支

git branch-d hotfix   //删除hotfix分支

git branch-D hotfix  //强制删除hotfix分支

git branch--merged //查看与当前分支合并过的分支,只要合并过的分支即使删掉也不用担心;

git branch--no-merged  //查看与当前分支合并过的分支,只要合并过的分支即使删掉也不用担心

git branch--no-merged  //查看与当前分支没有合并过的分支

7 分支合并

git merge hotfix  //合并hotfix分支到当前分支,使当前分支拥有hotfix分支的改动

git merege origin/master   //合并远程的master分支到当前分支

8

冲突解决

  • git merge时产生
  • git pull时会产生

git diff //查看暂存区和工作区的文件差异

<<<<<<<当前分支之前的本地文件内容========远程仓库的内容========>>>>>>>

对上述内容进行判断,人工判断需要保留的代码,删除多余的<<<<<<<和======即可

git add .//将解决冲突后的文件提交到暂存区

git commit-m  '解决冲突'

 

9 合并某个commit到其他分支

git cherry-pick commit-id1 commit-id2 //合并commit-id1和commit-id2到当前分支,自动commit

git cherry-pick -n commit-id1 commit-id2 //合并commit-id1和commit-id2到当前分支,不自动commit

10 储存区操作

git stash save 'my-stash' //添加当前暂存区和工作区的内容到储存区,并为储藏添加标记。执行以后暂存区和工作区会恢复到修改前的状态

git stash list //查看储存区的内容列表

git stash show stash@{0}   //查看id为0的储藏详情

git  stash pop stash@{0}   //将id为0 的储藏恢复到工作区。如果恢复以后没有冲突,储藏将被删除

git stash apply stash@{0}  //将id为0的储藏恢复到工作区。如果储藏将不会被删除

git stash drop stash@{0}  //删除id为0 的储藏

git stash clear   //删除所有储藏

 

11 本地更新remote仓库的信息 git fetch
12 日志查看

git log

git log --oneline  //将每条日志输出为一行(只显示哈希值和提交说明)

git log -2 //显示2条日志

git log --author Tom  //只查看Tom的提交记录

git log-p-checkout.js //只查看checkout.js的提交日志

git log --since=2.weeks //只查看2周内的提交记录

git log --after="2018-11-01"-before"2018-11-02"  //查看2018-11-01到2018-11-02d的日志

git log --pretty=format:"%h-%an,%ar:%s"

 //格式化日志内容。查看简写comit-id,作者,提交日期及提交说明

git log --graph //查看带点线图的日志

13 帮助命令  

(1)MERGE(合并)

 

四、GIT工作流

  • 中心化工作流
  • 基于功能分支的工作流
  • Gitflow工作流
  • Fork工作流

   (1)中心化工作流

  • 类似使用SVN,所有的更改都被提交到master分支,不创建其他分支

   (2)基于功能分支的工作流

  • 开发人员创建各自的feature分支。feature分支应该包含描述性的名称,比如animated-menu-items(菜单项动画)或issue-#1061。每个分支都应该有一个清晰、高度集中的目的。
  • 通过pull request将feature分支合并到master分支。

  (3)GITFOLW工作流

    master发布历史分支。可以打Tag develop开发分支。功能分布发父分支,用于整合功能分支release branches发布分支hotfixes紧急修复分支(维护分支)。

   

   (4)Fork工作流

     参见Github

  • Fork是服务端的clone(在服务端创建一份项目副本);
  • 修改后先push到副本仓库,然后向主仓库发起pull request;
  • 项目维护者将贡献者的修改合并到主仓库中。

五、其他补充

        (1)rebase和merge的区别

          Git社区图书中文版 

        (2)rebase和merge的区别

         Git教程 

         git remote prune origin,该命令可以删除本地版本上那些失效的远程追踪分支,具体用法是,假如你的远程版本库名是origin,则使用如下命令先查看哪些分支需要清理:

        git remote prune origin--dry--run

六、参考文献

          git--everything-是本地 

          常用Git命令清单 

         Git教程  

          学习Git分支 

          Git菜单 

 

 

转载地址:http://olcnn.baihongyu.com/

你可能感兴趣的文章
数据库设计
查看>>
Java虚拟机的内存分配和运行机制(粗谈)
查看>>
web开发之BaseServlet的使用
查看>>
初识Maven
查看>>
Maven分模块构建项目
查看>>
MyBatis初识
查看>>
Mybatis-高级应用
查看>>
MyBatis【进阶详解】
查看>>
面试题集锦(七)
查看>>
结构型设计模式——代理设计模式
查看>>
注解开发——Spring整合dao/service/web
查看>>
Git的应用
查看>>
架构的演进
查看>>
Elastic-Job的基础使用
查看>>
策略过滤器的灵活性分析
查看>>
POI的使用
查看>>
Anaconda和PyCharm的下载、安装和配置
查看>>
Matplotlib绘图工具
查看>>
机器学习之Knn算法
查看>>
Mockito单元测试简述
查看>>