git常用命令

本文介绍了Git和Repo的多种实用技巧,包括克隆仓库、清理未跟踪文件、撤销合并冲突记录、批量Patch操作等,还提供了批量执行命令的方法以及如何同步本地与远程分支。

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

1、clone某个ip地址的git仓库

#git clone git@192.168.1.3:knl/kernel-imx6.git

2、git删除未跟踪的文件

删除 untracked files

#git clean -f

连 untracked 的目录也一起删掉

#git clean -fd

连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)

#git clean -xfd

在用上述 git clean 前,强烈建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删

#git clean -nxfd
#git clean -nf
#git clean -nfd

3、代码提交并加上commit id

#gitdir=$(git rev-parse --git-dir); scp -p -P 29418 user-name@192.168.1.74:hooks/commit-msg ${gitdir}/hooks/
#git commit --amend
#git push branch-name HEAD:refs/for/master

4、撤销上次merge中解决conflict的记录

git会记录上次merge过程中解决conflict的解决方案,如果下次碰到类似的情况,那么就会使用上次的方案并且会提示:”using previous resolution.”。如果想要忽略此操作可以使用命令:

#git rerere forget 或者  #rm -rf .git/rr-cache

rerere: reuse recorded resolution


5、repo代码

#repo init -u ssh://192.168.1.74:29418/Src/XXX/platform/manifest -b XXX/iMX6_1s -m xxx.xml
#repo sync
#repo start branch-name --all

可以将所有目录地下的git切换为 branch-name 的branch。因为repo sync之后是存在于空分支的


6、批量patch操作

http://blog.youkuaiyun.com/wh_19910525/article/details/19416857

比如说当前有A/B两个项目使用同一版本的u-boot,但是A和B并不是由同一个branch引申出来的,没有共同的base。其中A当前的代码与B项目提交的前面20个提交(假设此处提交为P20,commit id为456789)相近。此时要求将A更新到与B一样的代码并且提交履历。
在B项目做如下操作:

#git format-patch -s 456789 ./

B项目中当前目录下生成从P20的提交到最新提交的所有patch。每个提交都有对应的一个patch,总共20个patch。格式如下:

这里写图片描述

#cp -rf ./*.patch patch_dir/         将生成的所有patch文件拷贝到patch_dir/目录
#git checkout -b B_base 456789       B项目回到与A项目类似的版本

在A项目做如下操作:

#rm -rf A_Dir/*                     将A项目中的代码全部删除
#cp -rf B_Dir/* A_Dir/              将B项目的代码全部拷贝到A去,此时code base完全一样。
#git add -A
#git commit -a “base the same as B”
#git am --abort         放弃掉以前的am信息,这样才可以进行一次全新的am。

将patch_dir/目录下所有patch文件按顺序打到当前目录下。此时A项目的代码会和B项目的代码完全一致,且包含B代码中最近20个提交的信息。

#git am B_Dir/patch_dir/*.patch

使用git am命令关键是要找到两个相同的code base然后进行替换。


7、repo forall -c

这个命令会遍历所有的git仓库,并在每个仓库执行-c所指定的命令(这个被执行的命令就不限于仅仅是git命令了,而是任何被系统支持的命令,比如:ls 、 pwd 、cp 等等的 )当我想通过这个命令遍历所有的仓库并在每个仓库执行”git checkout . “用以将每个仓库的改动都清除的时候,我这么输入命令:

#repo forall -c git checkout .

我发现这样根本不行。看来repo不能遍历执行checkout这个命令。今天我终于想到了另外一个命令”git reset –hard HEAD” 哈哈

#repo forall -c git reset --hard HEAD

再说一个新发现:以前用repo forall 执行一些命令的时候,可能再遍历到某个仓库的时候出了问题,但是我却苦于不知道这个仓库到底是哪个!一直也没有解决。今天终于找到了。。。。 关键时候还是要看命令自己带的帮助手册呀。。。
repo help forall 用这个命令查看下针对forall的帮助吧。说的很清楚,repo执行的时候加上-p参数就可以在遍历到每个仓库的时候先打印出当前的pwd,然后再继续执行-c所指定的命令。举例如下:

#repo forall -p -c git branch

该命令会遍历所有仓库并打印每个仓库的分支情况,由于有了-p参数,这样便会打印出每个仓库的路径!!!


8、将本地分支与远程分支同步起来

#git checkout --track -b master xxx/master

新建一个分支master并将其与远程分支 xxx/master 同步起来
可以查看 ./git/config 文件看本地分支与远程分支的同步情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值