文档章节

Git理解及常用操作总结

s
 sunsyu
发布于 2017/04/13 16:06
字数 2380
阅读 6
收藏 0

一、 Git作用

Git是一个开源的、免费的分布式版本控制工具,用于敏捷高效的处理各种大小项目的版本管理。Git有如下功能:

1、 从服务器上面克隆数据,包括代码和版本信息到本地。

2、 在本地代码的分支上创建分支,修改代码、在本地合并分支,跟踪分支,时刻保持数据的完整性

3、 开发者通过克隆,可以和服务器交互,在本地拷贝一个完整的git仓库,也可以将本地的更改的最新的完整的代码推送到服务器,以达到多人协作共同开发的目地,并且使源代码的发布和交流变得非常方便

4、 在本地使用Git命令提交自己的修改,发现错误也可以回溯到正确的版本

5、 保存当前工作空间,创建分支开始新的工作,完成后再恢复工作空间,是开发者可以合理安排自己的任务

 

二、 Gitrepo的区别

Git是一个开源的分布式的版本控制系统,用以有效、高速的处理个各种大小项目里面的版本管理工具

Repo是谷歌用python脚本写的调用git的一个脚本,主要用来下载、管理android项目的版本仓库,也就是说repo是用来管理给git管理的一个个仓库,开发者可以使用配置文件从网络上不同位置获取git仓库,组建repo工作目录。即repo的工作目录实际上是我们按照自己的开发需求,创建的git仓库集合

 

三、 Git的工作原理理解

git中,文件会在三个工作区域中流转,它们是git的工作空间、暂存区和本地仓库。

工作目录: 记录相对于本地仓库某个commit的文件添加,修改和删除

暂存区: 一次或多次commit需要提交的文件,commit后清空

本地仓库:保存本地的commit提交记录

 

Git中的任何一个文件对应这三个工作区域,也有且只只有三种状态:已提交(committed)、已修改(modified)、已暂存(staged)。已提交表示本文件已经被安全的提交到本地仓库中了;已修改表示本文件被修改了,但是还没提交保存;已暂存表示某文件被放在了暂存区中,下次提交时就会被保存到本地仓库中。

 

Git的一般工作流程如下:

1、 与远程仓库同步(pull,fetch)

2、 在工作目录中修改某些文件

3、 查看变更(show,status)

4、 载入变更(add or –a)、对修改后的文件进行快照,然后提交到暂存区

5、 提交载入的变更(commit),将保存到暂存区中的文件进行快照,永久保存到git目录中,后续便可以把文件推送到远程git仓库

6、 上传(push)

 

四、 Git的常见命令与作用 

1 Git配置

git config -1 #列举所有配置

1 命令帮助

git xxx –help或者man git xxx

git help <command>  # 显示command的help

2 设置

设置用户名,

git config --global user.name

设置用户邮箱,

git config --global user.email

设置颜色显示,

git config --global color.ui true

设置提交模板,

git config --global commit.template xxx

3 Git初始化

Clone远程版本库:git clone [--bare] <repository> [<directory>]

git clone git@xbc.me:wordpress.git

    添加远程版本库origin:语法为 git remote add [shortname] [url]  

git remote add origin git@xbc.me:wordpress.git

初始化版本库

Git init 

4 显示状态信息

git status -s

5 添加提交任务

git add:添加修改文件

git add -i:选择行添加文件

git rm:删除文件

git mv:修改文件名或移动文件

git rm --cached <file>:删除缓存区中的某文件

6 显示差异

git diff:比较当前文件和暂存区文件差异

git diff HEAD :当前版本库与工作区差异

git diff --cached/--stage :暂存区与版本库差异

7 提交修改到本地仓库

git commit:将暂存区任务提交到本地仓库

git commit --amend:修正最后一次提交

8 显示提交日志和内容

git log --before=2016.7.16 --after=2016.7.15 --author=yuzicheng:查找时间在20160716和20160715之间的自己的提交日志

git log:只是显示简单的提交记录

git log -p:显示具体的文件修改

git show:# 显示某次提交的内容

git reflog:查看历次提交的版本号

git reflog expire --expire=now --all 清楚所有日志,这样会使reflog全部记录都过期,从而commit、blob、tree对象都会变成未被关联的dangling对象

git log --graph --oneline 显示树形结构,不显示对应的详细信息

git log --graph --pretty=oneline --stat 格式化日志输出,显示树形结构,显示对应的详细信息

9 远程操作

git pull : 获取远程更新并合并到本地仓库

git push : 将当前提交推送到远程仓库

10分支操作

git branch:显示本地分支

git branch -a:显示本地和远程所有分支

git branch <branch>:创建本地分支

git branch -d <branch>:删除本地分支

git branch -m <branch>:修改本地分支

11 重置

git reset -- filename commit节点的文件替换暂存区中的文件,不改变引用和工作区,同git reset HEAD filename

git reset --soft <commit>:改变引用指向到commit节点,不改变暂存区和工作区

git reset --mixed <commit>:改变引用指向到commit节点,并且用commit节点内容替换暂存区,不改变工作区

git reset --hard <commit>:改变引用指向到commit节点,并且用commit节点内容替换暂存区和工作区

git reset --hard HEAD^5   git回转到上第几5个版本

12 检出

git checkout 汇总显示工作区缓存区和HEAD的差异,同git checkout HEAD

git checkout <branch>:切换到分支branch,实际上就是让.git/HEAD中不是指向.git/refs/heads/master,而是为.git/HEAD指定一个具体的提交ID

git checkout -b <new_branch> [<start_point>]:从start_point创建新分支,并切换到新分支

git checkout -- filename 用缓存区中的文件替换当前工作空间的文件

git checkout branch -- filename 维持HEAD的内容不变,用branch中的该文件直接覆盖缓存区和工作区中的文件

git checkout HEAD ./filename  用master中的文件替换暂存区和工作区中的全部/某文件

git checkout ./filename 用暂存区中的文件替换工作区中的全部/部分文件

13 反转提交

git revert <commit>:撤销commit节点的提交

git revert HEAD     # 恢复最后一次提交的状态

14 冲突解决

git merge [--no-commit] <commit>:将commit节点内容合并到当前分支

git mergetool:通过工具来合并

15 里程碑

git tag -m <msg> <tagname> [<commit>]:在commit节点创建一个名为tagname 的tag,说明信息为msg

16 保存Git工作现场

    git stash save 说明 保存进度的时候同时指定说明

git stash:保存当前工作现场,等以后恢复现场后继续工作

git stash clear 清除所有stash

Git stash branch <branchname> <stash> 基于进度创建分支

恢复以前保存的现场继续工作

1、查看列表git stash list

2、git stash apply [--list] [<stash>]恢复,恢复后stash并不会删除,--list表示同时尝试恢复缓存区,stash指定的回复哪一个stash

3、git stash pop [--list] [<stash>] 恢复的同时删除stash,--list表示同时尝试恢复缓存区,stash指定的回复哪一个stash

17 查看git对象的内容或者对象信息

git cat-file -p HEAD 查看HEAD对象的信息

git cat-file -t HEAD 查看HEAD对象的类型

18 删除多余的目录和文件

    git clean -nd 查看将要删除那些目录和文件

    git clean -fd 强制删除多余的目录和文件

19 文件追溯

git blame filename  

20 其他

git prune 清楚未被关联的dangling对象

git fask 查看未被关联到的对象

git repack 对松散对象进行打包

git gc 对版本库进行整理,默认为两周,如果使用--prune=now,则直接就完成对未关联对象的清理

git mergetool 冲突解决工具

git ls-tree -l HEAD 查看HEAD指向的目录树

 

五、 几个常用命令的区别

1、从远程获取代码 

   git fetch:相当于是从远程获取最新版本到本地,不会自动merge

  git pull:相当于是从远程获取最新版本并merge到本地,相当于git fetch git merge

  在实际使用中,git fetch更安全一些。因为在merge前,我们可以查看更新情况,然后再决定是否合并

2、版本还原 

Reset 是指将当前head的内容重置,不会留任何痕迹。

Revert 是撤销某次提交,但是这次撤销也会作为一次提交进行保存。

3、分支合并git merge 和git rebase

Git rebase:如下图,首先git checkout Dev2,然后git rebase Dev1,这两个命令会首先把Dev2中的每个提交(EF)取消掉,然后将他们临时保存为补丁,放到.git/rebase目录中,然后将Dev2更新为最新的Dev1D),最后把保存的补丁应用到New_branch上;

     

Git merge:如下图,只是将两个分支合并在一起,组成一个新的提交                       

             


© 著作权归作者所有

s
粉丝 0
博文 109
码字总数 135924
作品 0
深圳
私信 提问
我是如何学习git

一开始学习git的时候,网上的git教程很多,看得人眼花缭乱,不知道如何下手。现在对git已经很熟悉了,回过头来总结一下学习方法。 一般官方文档是最全面,但是不一定适合快速上手。我们可以学...

好好编程
2017/11/14
0
0
对比Git 与 SVN,这篇讲的很易懂

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯工蜂发表于云+社区专栏 导语 本文从 Git 与 SVN 的对比入手,介绍如何通过 Git-SVN 开始使用 Git,并总结平时工作高频...

腾讯云加社区
2018/10/31
0
0
对比 Git 与 SVN,这篇讲的很易懂

---恢复内容开始--- 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯工蜂发表于云+社区专栏 导语 本文从 Git 与 SVN 的对比入手,介绍如何通过 Git-SVN 开始使用 Git,...

腾讯云+社区
2018/10/31
0
0
[git]merge和rebase的区别

虽然工作中要经常使用git,但是也就常用那么几个命令:pull、push、status、merge、rebase,对git谈不上有多熟悉,加上工作性质很少和同事协同开发,即使出现问题,顶多是删除项目,重新远程...

一段汇编
2016/08/17
53
0
Git系列二之数据管理

笔者Q:552408925、572891887 架构师群:471443208 bjstack运维社区:524721466 1.Git基本管理 git常用的基本操作 1.1提交数据 我们可以简单的把工作目录理解成是一个被Git服务程序管理的目录,...

Bgxuliangwei
2017/05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android双向绑定原理简述

Android双向绑定原理简述 双向绑定涉及两个部分,即将业务状态的变化传递给UI,以及将用户输入信息传递给业务模型。 首先我们来看业务状态是如何传递给UI的。开启dataBinding后,编译器为布局...

tommwq
今天
2
0
Spring系列教程八: Spring实现事务的两种方式

一、 Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。...

我叫小糖主
今天
6
0
CentOS 的基本使用

1. 使用 sudo 命令, 可以以 root 身份执行命令, 必须要在 /etc/sudoers 中定义普通用户 2. 设置 阿里云 yum 镜像, 参考 https://opsx.alibaba.com/mirror # 备份mv /etc/yum.repos.d/CentO...

北漂的我
昨天
3
0
Proxmox VE技巧 移除PVE “没有有效订阅” 的弹窗提示

登陆的时候提示没有有效的订阅You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options. 用的是免费版的,所以每次都提示......

以谁为师
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部