clone某个ip地址的git仓库
1 | git clone git@192.168.1.3:knl/kernel-imx6.git |
git删除未跟踪的文件
git clean -f
: 删除 untracked files;git clean -fd
: 连untracked的目录也一起删掉;git clean -dxf
: 连gitignore的untrack文件和目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)。
代码提交并加上commit id
1 | gitdir=$(git rev-parse --git-dir); scp -p -P 29418 user-name@192.168.1.74:hooks/commit-msg ${gitdir}/hooks/ |
撤销上次merge中解决conflict的记录
git会记录上次merge过程中解决conflict的解决方案,如果下次碰到类似的情况,那么就会使用上次的方案并且会提示using previous resolution.
。如果想要忽略此操作可以使用命令:git rerere forget
或者rm -rf .git/rr-cache
。rerere
:reuse recorded resolution
repo代码
1 | repo init -u ssh://192.168.1.74:29418/Src/XXX/platform/manifest -b XXX/iMX6_1s -m xxx.xml |
单独取出某个提交的patch
git format-patch -s -1 commitid
单独取出某个提交中的某个文件的patch
git format-patch -s -1 commit_id file_name
批量patch操作
http://blog.csdn.net/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。格式如下:
1 | cp -rf ./*.patch patch_dir/ 将生成的所有patch文件拷贝到patch_dir/目录 |
在A项目做如下操作:
1 | rm -rf A_Dir/* 将A项目中的代码全部删除 |
将patch_dir/
目录下所有patch文件按顺序打到当前目录下git am B_Dir/patch_dir/*.patch
。此时A项目的代码会和B项目的代码完全一致,且包含B代码中最近20个提交的信息。
使用git am
命令关键是要找到两个相同的code base然后进行替换。
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
参数,这样便会打印出每个仓库的路径
将本地分支与远程分支同步起来
git checkout --track -b master xxx/master
: 新建一个分支master
并将其与远程分支xxx/master
同步起来。可以查看./git/config
文件看本地分支与远程分支的同步情况。