您的位置:首页 > 其它

Git理解及常用操作总结

2017-04-13 00:00 134 查看
一、 Git作用

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

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

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

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

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

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

二、 Git和repo的区别

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中的每个提交(E和F)取消掉,然后将他们临时保存为补丁,放到.git/rebase目录中,然后将Dev2更新为最新的Dev1(D),最后把保存的补丁应用到New_branch上;

Git merge:如下图,只是将两个分支合并在一起,组成一个新的提交
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: