git/repo使用笔记【未完】

本文介绍了Git和Repo中几个非常实用的命令及其应用场景,包括如何使用repoforall遍历所有仓库并执行命令、如何使用gitrevert撤销提交而不丢失历史、如何利用gitpush的不同方式推送分支以及如何通过gitreset和gitrevert区别处理错误提交。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在源码根目录下,查看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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值