git config
Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)
显示当前的Git配置
1
$ git config --list
设置提交代码时的用户信息
1
2$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"设置彩色显示
1
git config --global color.ui true
设置vim为默认编辑器
1
git config --global core.editor "vim"
设置不关心权限
1
git config core.filemode false
git push/commit
推commit到remote git server
for是推到gitweb里面,使本条commit可以在gitweb上能查到1
git push aosp HEAD:refs/for/master
推tag到remote git server:
1
repo forall -c "git push origin TAG-04.15.010.03.06"
推commit和tag到remote git server:
推到heads里面,需要remote先给权限,因为gitweb上无法查看1
repo forall -c "git push aosp --tags HEAD:refs/heads/master"
创建PatchSet
有的时候推到remote git server还没有merge之前,若是遇上像Merge Conflict或是还有一些瑕疵需要修改,又不想产生新的Change,这个时候PatchSet就发挥作用了。1
2
3
4
5
6
7
8
9
10
11
12
13
14
151.Create normal commit and push (for Patchset1)
for example:
1. git add Server.java
2. git commit -m "server added"
3. git push origin HEAD:refs/for/master
After doing some changes to files
2.Finally to create new Patchset (Patchset 2)
1. git add Server.java
2. git commit --amend
3. there has two way:
git push origin HEAD:refs/for/master
or
git push origin HEAD:refs/changes/05/112405
(112405是commit的网址,05是112405最后两个号码)
Repush commit to remote
git log/diff
查看单独一条branch的message
1
git log --graph --oneline --decorate aosp/master
显示指定文件相关的每一次diff
1
$ git log -p [file]
查看某个TAG与当前HEAD之前差了哪些commit
1
repo forall -p -c "git log TAG-04.15.010.03.08.a1..HEAD" > diff.txt
显示指定文件是什么人在什么时间修改过
1
$ git blame [file]
显示某次提交的元数据和内容变化
1
$ git show [commit]
显示暂存区和工作区的差异
1
$ git diff
git tag
新建一个tag在当前commit
1
$ repo forall -c "git tag -a TAG.04.15.010.1.0 -m 'release TAG.04.15.010.1.0 to cus'"
新建一个tag在指定commit
1
$ git tag [tag] [commit]
查看tag信息
1
$ git show [tag]
git branch
将整个code base切到某个特定时间
1
repo forall -c 'git log origin/master -n1 --before="2018-07-21 16:00:00" --format="%H" | xargs git checkout'
列出所有本地分支和远程分支
1
$ git branch -a
git Merge
使用合之前的改动:
1
2
3
4
5git checkout --ours file_name
```bash
* 使用要合的改动:
```bash
git checkout --theirs file_name遗忘对之前文件的处理:
1
git rerere forget [filename]
repo项目的大版本合code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16//1.切到远端分支:
repo forall -c "git checkout origin/cusline"
//2.执行merge tag的命令,并把merge的结果输出到log.txt中,方便查找。
repo forall -p -c "git merge TAG.1.23.a5 -m 'Merge tag TAG.1.23.a5 in to cusline'" > log.txt
//3.检查log.txt里面是否有conflict
vim log.txt
:/Conflict
//4.转到有conflict的git project,修正conflict,并创建commit
git add -A
git merge --contine
//5.直到把所有Conflict的地方都修正后,确认暂存区里面是否还有东西
repo forall -c "git status"
//6.保险起见,把合完后的code与要合的tag做比较,确认diff.txt里面,是否只有客制化的部分
repo forall -c "git diff TAG.1.23.a5" > diff.txt
//7.确认无误,把新的commit推到远端
repo forall -c "git push origin HEAD:refs/for/cusline"
git Patch
Linux 默认 patch
1
2patch –p1 < ../aaa.patch
p表示跳过.diff里面所指定的几级目录Git Patch 生成某个commit的patch
1
2git format-patch -1 <commit number>
ex: git format-patch -s -1 c95c8cb4edbadbc46406868f7b60442a9b54f61a把某个patch合进去:
1
git am <file.diff>