一 git
1 git log -2 . //查看当前目录下的最后两个log
2 git config --l //查看当前git仓库的信息; 包括当前分支跟踪的是远端的哪个分支
3 git config --list //同上
4 git push origin 本地分支名:远程分支名//把本地分支的更改push到远程分支
5 git checkout -b 本地分支名 远程分支名 //新建本地分支,该分支追踪远端分支
6
repo forall -pcv git log --since="yyy-mm-dd" --until="yyyy-mm-dd" //对所有仓库查看从 since到until的log
7 git stash //git pull 有冲突时 先将本地修改stash ; pull结束后再 git stash pop 将stash的内容pop出来 ,如果stash的内容要重复多次用,就不能用git stash pop ,要用git stash apply
8
git config –global alias.co checkout // co将会成为checkout的别名
9
git config –global alias.ci commit
10 git config --global color.ui true //git命令输出开启颜色
11
关于从A代码里面打包,放到B代码的问题
1) 在A代码里面
git diff <起始哈希值> <终点哈希值> > A.patch
在B代码里面
git apply A.patch
//这种方法A中 git commit 的log不会到B中去
2)
A代码里面
git format-patch - <分支名> -o <路径>
在B代码里面
git apply A.patch
//这种方法A中 git commit 的log会到B中去
12 git format-patch commit-id -x
//生成从commit-id 开始往前(时间上往前,在log上看是向下走)的x个补丁这x个补丁是按时间顺序升序排列;也就是说第一个编号(0001)的补丁应该是从commit-id开
//始往下数x个log的那个补丁, 最后一个编号(000x)的补丁才是commit-id对应的那个补丁; 如果不加x参数,那么生成的是从时间上最后的一个commit-id到最早一个
//commit-id的所有补丁
13 git diff //比较working area 和 追踪的分支的差异
git diff master //比较当前工作区和master分支的区别 (对照下一条命令,这里的master应该指的是本地checkout的master分支)
git diff refs/remotes/origin/master //比较当前工作区和 远程master分支的区别
git diff commit-id xxx.cpp //拿当前工作区的某个文件比较某次提交 ;输出结果仅仅是这个文件的比较
//输出结果说明:
//一般都已当前工作区的文件为目标文件
//-开头的行,是只出现在源文件中的行
//+开头的行,是只出现在目标文件中的行
//以下为http://blog.csdn.net/sheismylife/article/details/8044796的一个例子
//这个结果说明当前工作区的 .cpp文件相比这个commit-id的文件 仅仅是多了一个time_measure.h的头文件
-
diff --git a/data_service/src/socket_helper.cpp b/data_service/src/socket_helper.cpp
-
index d606452..047e213 100755
-
--- a/data_service/src/socket_helper.cpp
-
+++ b/data_service/src/socket_helper.cpp
-
@@ -4,6 +4,7 @@
-
#include "data/login_response.h"
-
#include "data/heartbeat_response.h"
-
#include "helper/parser.h"
-
+#include "helper/time_measure.h"
-
#include
-
#include "exception/socket_error.h"
-
#include "exception/data_error.h"
14 git的三个状态(详见git权威指南P74 非常详细)
working area 工作区
stage 暂存区
reposity 仓库(版本库 本地)
git diff //没有任何参数,比较的是 working area 和 stage 的区别
git diff --cached (或者--stage) // 比较的是暂存区 和 版本库的区别
git diff HEAD //比较的 工作区 和 仓库(本地版本库)的区别
15 如果提交时的用户名和邮箱有误,可以用下面命令更改
git commit --amend --author='lazy_mouse
'
16 .git/refs/heads/branch_name 这个文件始终记录的是 git log 的最后一条提交的commit-id (验证过,确实是这样,一旦有新的提交,那么这个文件就立马变成最新提交的id)
// 书中有讲 .git/refs 是保存引用的命名空间, 其中 .git/refs/heads目录下的引用又称为分支 // 做实验是 本地只有一个default分支,所以heads下只有一个default文件,该文件的内容只有一行(commit-id) ,这个commit-id始终是最新的log的id; 对于分支,既可以用正规的长格式的表示方法,如refs/heads/default, 也可以去掉签名的两级目录用default表示 也就是说 git diff default 和 git diff HEAD 和 git diff refs/heads/default 是等价的
17 恢复reset --hard ( git reset --hard commit-id 也是有补救滴)
1) git reflog 输出如下:(这个东西的路径在.git/logs/refs下面 下面有heads 和remotes )
516c242 HEAD@{0}: HEAD^: updating HEAD
aa7787f HEAD@{1}: commit (amend): test add a empty line in envsetup.sh
98baba7 HEAD@{2}: commit: test add a empty line in envsetup.sh
516c242 HEAD@{3}: checkout: moving from 516c242b31f81c2308a868323f87c0da5ce16756 to default_android-4.1.1_r3
2) 在git reflog的输出中可以看到,最后一次的操作是 updating HEAD 这里执行的其实是reset --hard HEAD^ ; 现在想要恢复该操作,就需要将HEAD重置到HEAD@{1},
git reset --hard HEAD@{1}
//git中 HEAD 指向的是应该是最新的commit-id ,也就是执行git log 时最上面的那条log对应的id ,HEAD^是其父提交,也就是向下数一个commit,依次 HEAD^^是父父提交,最多好像可以有三到四个^^
18 git checkout命令执行时最好带上路径,省的出现detached HEAD的问题
git checkout .
二 repo
1 用repo sync 在抓去 android source code 的时候,会经常出现一些错误导致 repo sync 中断,每次都要手动开始。 可以用如下的命令,来自动重复:
$?=1; while [ $? -ne 0 ] ; do repo sync ; done
2 repo forall -c 'rm -rf .git/rebase-apply;' git reset --hard; git checkout -f m/osc'
//删除repo sync时冲突的, 然后reset , 在强制切到m/osc分支 ; //该命令尚不完全明白
3 repo start base --all //所有仓库都切到base分支,base分支是manifest中指定的默认分支(由revision指定)
4 repo abondon base //所有仓库都删除base分支
5 repo init -u git://android.git.kernel.org/platform/manifest.git -b release-1.0
// -u 参数指定一个URL, 从这个URL 中取得repository 的 manifest 文件
// -m 参数来选择 repository 中的某一个特定的 manifest 文件,如果不具体指定,那么表示为默认的 namifest 文件 (default.xml)
// -b 参数来指定某个manifest 分支
6 repo uploade . //上传 ./的变更到gerrit , gerrit review 后才会真正到服务器上
7 repo branch //查看所有仓库的分支信息
8 repo status //查看所有仓库的status
9 repo sync ./ //拉本目录 如果是意外删除了某个工程,就应该是 repo sync hardware/libharedware_legacy
10 repo diff //查看哪些文件夹下都做了改动
11 repo upload 后发现错了, 更改办法(没有试过)
(1)在原有分支上修改文件
(2)git commit --amend
(3)repo upload --replace <工程名>
(4)出现文件以后去掉第1行的#,中括号里面填上 change-id
12
阅读(5782) | 评论(0) | 转发(0) |