参考:https://www.cnblogs.com/mengdd/p/4153773.html
Git:
Git是一种分布式的代码管理工具,在一个大型项目里面需要很多小项目构成,每一个项目都是一个独立的git仓库,需要自动化创建分支,由repo来完成,其功能包括:自动化创建分支,查看分支状态、提交代码、更新代码等基础Git操作。
Repo仓库通过manifest仓库可以获得所有AOSP子项目仓库的元信息。
整个运行的步骤:
①先从官网上获取repo脚本(用curl工具从官网获得并保存再~/bin/repo。。最后使用chmod命令赋予执行权限)
②下载好之后用repo init -u进行安装(其实是安装了Repo仓库和Manifest仓库)
其中repo脚本中会有一个findrepo函数从当前目录往上遍历查看是否已经存在repo,若已经存在则会显示repo has initialed
一个标准的repo需要具备:
Bundle文件是git提供的一种机制,用来解决不能正常通过git、ssh和http等网络协议从远程地址克隆Git仓库的问题。简单来说,就是我们可以用“git bundle”命令来在一个Git仓库创建一个Bundle文件,这个Bundle文件就会包含Git仓库的提交历史。把这个Bundle文件通过其它方式拷贝到另一台机器上,就可以将它作为一个本地Git仓库来使用,而不用去访问远程网络。
git常用的命令
git init: 在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹
git clone:git clone [url]
git clone https://github.com/tianqixin/runoob-git-test
git status:查询repo状态
git log:查看日志
git log --oneline --number: 每条log只显示一行,显示number条.
git log --oneline --graph:可以图形化地表示出分支合并历史.
git log --decorate会显示出tag信息.
git log --author=[author name] 可以指定作者的提交历史.
git log --since --before --until --after 根据提交时间筛选log.
--no-merges可以将merge的commits排除在外.
git log --grep 根据commit信息过滤log: git log --grep=keywords
默认情况下, git log --grep --author是OR的关系,即满足一条即被返回,如果你想让它们是AND的关系,可以加上--all-match的option.
git log -S: filter by introduced diff.
比如: git log -SmethodName (注意S和后面的词之间没有等号分隔).
git log -p: show patch introduced at each commit.
每一个提交都是一个快照(snapshot),Git会把每次提交的diff计算出来,作为一个patch显示给你看.
另一种方法是git show [SHA].
git log --stat: show diffstat of changes introduced at each commit.
同样是用来看改动的相对信息的,--stat比-p的输出更简单一些.
git add:将修改添加到暂存区 常用:git add .
git diff:比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容.
git diff HEAD:比较woking directory和上次提交之间所有的改动.
git commit:提交
git commit --amend 增补提交. 会使用与当前提交节点相同的父节点进行一次新的提交,旧的提交将会被取消.
git reset:
这里的HEAD关键字指的是当前分支最末梢最新的一个提交.也就是版本库中该分支上的最新版本.
--git reset HEAD: 这个命令用来把不小心add进去的文件从staged状态取出来,可以单独针对某一个文件操作: git reset HEAD - - filename, 这个- - 也可以不加.
--git reset --soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可;
--git reset --hard:使用git reset —hard HEAD进行reset,即上次提交之后,所有staged的改动和工作目录的改动都会消失,还原到上次提交的状态.彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉;
git revert: 反转撤销提交.只要把出错的提交(commit)的名字(reference)作为参数传给命令就可以了
git revert HEAD: 撤销最近的一个提交.
git rm:移除文件
git clean: / ** git remove**
git stash: git stash将会把当前目录和index中的所有改动(但不包括未track的文件)压入一个栈,然后留给你一个clean的工作状态,即处于上一次最新提交处.
git stash list会显示这个栈的list.
git stash apply:取出stash中的上一个项目(stash@{0}),并且应用于当前的工作目录.
也可以指定别的项目,比如git stash apply stash@{1}.
如果你在应用stash中项目的同时想要删除它,可以用git stash pop
删除stash中的项目:
git stash drop: 删除上一个,也可指定参数删除指定的一个项目.
git stash clear: 删除所有项目.changjian
git branch:列出分支,常用:git branch -a
git checkout:切换到一个分支 -b 创建并切换到新的分支
git merge:把一个分支merge进当前分支
git tag: 会在一个提交上建立永久性的书签,通常是发布一个release版本或者ship了什么东西之后加tag.
比如: git tag v1.0
git tag -a v1.0, -a参数会允许你添加一些信息,即make an annotated tag.
git remote:
如果你clone一个project,Git会自动将原来的url添加进来,别名就叫做:origin.
git remote -v:可以看见每一个别名对应的实际url.
git fetch:可以git fetch [alias]取某一个远程repo,也可以git fetch --all取到全部repo
git pull: git pull会首先执行git fetch,然后执行git merge,把取来的分支的head merge到当前分支.这个merge操作会产生一个新的commit.
git rebase:把一个分支的修改合并到当前分支
git push:
git reflog: git reflog是对reflog进行管理的命令,reflog是git用来记录引用变化的一种机制,比如记录分支的变化或者是HEAD引用的变化.
repo常用命令:
repo -init
-u:指定一个URL,其连接到一个manifest仓库
-b:选择manifest仓库中的一个特殊分支
-m:在manifest仓库中选择一个xml文件
同步代码:repo sync
创建并切换分支:repo start可以为单个项目或所有项目以清单文件中已设定的分支为基础,在本地创建新的分支。
查看分支:repo branches
切换分支:repo checkout
查看工作区文件的差异:repo diff
查看文件状态:repo status
删除指定分支:repo abandon branchname
删除已经合并分支:repo prune
将文件添加到index表中:将项目工作区中的改动添加到暂存区
Repo stage -i(-i 给出界面让用户选择)
设置远程仓库:repo remote addd remotename url
遍历当前项目中的所有git仓库:repo forall -c
合并多个分支:repo forall -p -c 给i他merge local
打标签:repo forall -c git tag 标签名
显示版本号:repo version
网友评论