在源码根目录下,查看git使用手册:git help xx(如log)
在源码根目录下,查看repo使用手册:repo help xx(如sync)
一、常用命令
1、repo forall
这个命令会遍历所有的git仓库,并在每个仓库执行-c所指定的命令(这个被执行的命令就不限于仅仅是git命令了,而是任何被系统支持的命令,比如:ls、 pwd 、cp等等的),另外,repo加上-p参数可以在遍历到每个仓库的时候先打印出当前的pwd,然后再继续执行-c所指定的命令。
repo forall -p -c "git log --oneline--author=Jack"
// 在android源码下,搜索名为Jack的作者的所有提交
参考: repo的一些用法和理解
2、git revert
撤销某次提交,但是保存该次提交之前和之后的提交,并且把这次撤销作为一次最新的提交
git revertHEAD
// 撤销前一次 commit
git revertHEAD^
// 撤销前前一次 commit
git revert commit(比如:fa042ce57ebbe5bb9c8db709 f719cec2c58ee7ff)
// 撤销指定的版本,撤销也会作为一次提交进行保存。
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容
参考: git revert用法
3、git push
git push origintest:master //
提交本地
test
分支作为远程的
master
分支
git push origintest:test //
提交本地
test
分支作为远程的
test
分支
git push origin:test //刚提交到远程的test将被删除,但是本地还会保存的,不用担心。
git push aospHEAD:refs/for/abc //提交本地当前分支作为远程的
refs/for/abc分支,aosp为remote的名称
在每次gitpush前,最好先进行git pull操作,检查自己的提交是否和别人的提交冲突。
参考: git push用法和常见问题分析
二、使用场景
1、恢复误删除的提交
$ git log --oneline
60bcdc7 add 333 to 3.c
d292e31 add 222 to 2.c
294ce9d add 111 to 1.c
$ git reset --hard d292e31
HEAD is now at d292e31 add 222 to 2.c
$ git log --oneline
d292e31 add 222 to 2.c
294ce9d add 111 to 1.c
$ git reflog
d292e31 HEAD@{0}: reset: moving to d292e31
60bcdc7 HEAD@{1}: reset: moving to HEAD@{3}
73b16c1 HEAD@{2}: revert: Revert "add 333 to 3.c"
60bcdc7 HEAD@{3}: reset: moving to HEAD@{1}
d292e31 HEAD@{4}: reset: moving to d292e31
60bcdc7 HEAD@{5}: commit: add 333 to 3.c
d292e31 HEAD@{6}: commit: add 222 to 2.c
294ce9d HEAD@{7}: commit: add 111 to 1.c
$ git reset --hard HEAD@{5}
HEAD is now at 60bcdc7 add 333 to 3.c
$ git log --oneline -3
60bcdc7 add 333 to 3.c
d292e31 add 222 to 2.c
294ce9d add 111 to 1.c
2、区别git revert和git reset
commit如下:
A-->B-->C-->D-->E
想要回到commit C之后的状态,也即把D和E rollback
git revert:
$ git revert D
$ git revert E
结果:
A-->B-->C-->D-->E-->F-->G
F是还原commit D修改结果的commit
G是还原commit E修改结果的commit
git reset:
$ git reset --hard C
结果:
A-->B-->C
其中,选项--hard会同时reset本地文件
3、生成patch和应用patch
原则:在哪个目录层次制作的patch,就在哪个目录层次应用patch
生成patch:
git diff $branch > *.patch
git diff $filename > *.patch
应用patch:
git apply *.patch
patch -p1 < *.patch
patch -p0 < *.patch
参考: Git的Patch功能
4、删除本地code的分支,然后sync server上code
repo abandon $BRANCH
repo sync -d
repo start --all $BRANCH
在源码根目录下,查看repo使用手册:repo help xx(如sync)
一、常用命令
1、repo forall
这个命令会遍历所有的git仓库,并在每个仓库执行-c所指定的命令(这个被执行的命令就不限于仅仅是git命令了,而是任何被系统支持的命令,比如:ls、 pwd 、cp等等的),另外,repo加上-p参数可以在遍历到每个仓库的时候先打印出当前的pwd,然后再继续执行-c所指定的命令。
repo forall -p -c "git log --oneline--author=Jack"
参考: repo的一些用法和理解
2、git revert
撤销某次提交,但是保存该次提交之前和之后的提交,并且把这次撤销作为一次最新的提交
git revertHEAD
git revertHEAD^
git revert commit(比如:fa042ce57ebbe5bb9c8db709
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容
参考: git revert用法
3、git push
git push origintest:master
git push origintest:test
git push origin:test
git push aospHEAD:refs/for/abc
在每次gitpush前,最好先进行git pull操作,检查自己的提交是否和别人的提交冲突。
参考: git push用法和常见问题分析
二、使用场景
1、恢复误删除的提交
$ git log --oneline
60bcdc7 add 333 to 3.c
d292e31 add 222 to 2.c
294ce9d add 111 to 1.c
$ git reset --hard d292e31
HEAD is now at d292e31 add 222 to 2.c
$ git log --oneline
d292e31 add 222 to 2.c
294ce9d add 111 to 1.c
$ git reflog
d292e31 HEAD@{0}: reset: moving to d292e31
60bcdc7 HEAD@{1}: reset: moving to HEAD@{3}
73b16c1 HEAD@{2}: revert: Revert "add 333 to 3.c"
60bcdc7 HEAD@{3}: reset: moving to HEAD@{1}
d292e31 HEAD@{4}: reset: moving to d292e31
60bcdc7 HEAD@{5}: commit: add 333 to 3.c
d292e31 HEAD@{6}: commit: add 222 to 2.c
294ce9d HEAD@{7}: commit: add 111 to 1.c
$ git reset --hard HEAD@{5}
HEAD is now at 60bcdc7 add 333 to 3.c
$ git log --oneline -3
60bcdc7 add 333 to 3.c
d292e31 add 222 to 2.c
294ce9d add 111 to 1.c
2、区别git revert和git reset
commit如下:
A-->B-->C-->D-->E
想要回到commit C之后的状态,也即把D和E rollback
git revert:
$ git revert D
$ git revert E
结果:
A-->B-->C-->D-->E-->F-->G
F是还原commit D修改结果的commit
G是还原commit E修改结果的commit
git reset:
$ git reset --hard C
结果:
A-->B-->C
其中,选项--hard会同时reset本地文件
3、生成patch和应用patch
原则:在哪个目录层次制作的patch,就在哪个目录层次应用patch
生成patch:
git diff $branch > *.patch
git diff $filename > *.patch
应用patch:
git apply *.patch
patch -p1 < *.patch
patch -p0 < *.patch
参考: Git的Patch功能
4、删除本地code的分支,然后sync server上code
repo abandon $BRANCH
repo sync -d
repo start --all $BRANCH