Git 仓库
一.Git 基本命令
1. git branch -av 查看本地分支
2. git branch 分支名 创建分支
3. git checkout 分支名 切换分支
4. git status 查看修改过的文件
5. git diff 比较修改点差异
6. git add . 表示添加新文件和编辑过的文件==不包括删除的文件==到暂存区
7. git add -A . 表示添加所有内容到暂存区
8. git commit -m "注释" 暂存区内容添加到本地仓库中。
9. git push 将本地仓库版本上传到远程并合并。
格式:git push <远程主机名> <本地分支名>:<远程分支名>
10. git rebase --abort 会放弃合并,回到rebase操作之前的状态,之前的提交的不会丢弃;
11.git rebase --skip 则会将引起冲突的commits丢弃掉(慎用!!);
二. 提交步骤
#准备工作
1. git checkout master(845_LA2.0.1_BP) 切换到主分支
2. git pull 拉取服务器最新代码(提交代码前一定要先更新本地代码)
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull orgin master (追踪关系)
3. git checkout local 切换到本地分支
#切换到local分支后, 就是修改代码#
1. git status 查看本地库修改过的文件
2. git diff 查看详细的修改记录
3. git add 提交文件
(git add . 全部提交-前提是改动的文件都是需要提交的)
4. git commit -m "提交注释" 修改完了, 就正常提交代码
5. 如果有多次local分支的提交,就合并,只有一次可以不合并(合并成一个commit 可以修改commit描述)
git rebase -i HEAD~2 //合并提交 --- 2表示合并两个
#提交代码
将master内容合并到local
1.首先切换到主分支,确保master分支代码更新到最新的
git checkout master
git pull
2.合并代码
git checkout local //切回工作分支
git rebase master---->解决冲突--->git rebase --continue
2.提交代码
git checkout master//切换到主分支提交代码
git merge local //将local分支合并到master
git push
在本地分支提交代码
git push <远程主机名> <本地分支名>:<远程分支名>
例:git push origin release:refs/for/845_LA2.0.1_BP
git branch -r 查看远程分支名
尽量不在本地分支提交代码:
当同时开发多个模块功能时,需要创建不同的分支。只在master push代码会好用一点。
三.已经commit并push了,怎么继续提交到之前的commit
案例:本地提交改动后,再次修改代码,执行git commit -m 命令后,默认会创建新的commit信息及hash值,这样提交会出现两笔提交记录。
使用git commit --amend 是在已有的commit上改动。
修改好代码以后,操作如下几个步骤
1. git add 提交修改的文件
2. git commit --amend进入vim编辑器
3. 输入i编辑提交信息(可以不做修改)
4. 按ESC 输入:wq 保存退出,这个时候已经将你修改的内容合并到上一笔提交了
5. 强迫push:命令跟上面一样,git push origin --force 本地分支名:远程分支名
Repo仓库
环境搭建:
1.sudo apt-get install git 下载git
2.git config --global user.name "name" 配置Git
git config --global user.email "name@xxx.com"
3.ssh-keygen -C 'you email name@xxx.com' -t rsa 创建密钥文件(git是通过ssh去链接资源库)
4.cd ~/.ssh
cat id_rsa.pub 将公钥复制到gerrit服务器SSH Public keys
5.ssh -p port xxx.xxx.xxx.xxx 测试连接是否畅通(server host key 会显示port 和 ip)
成功后下一步
1.mkdir ~/.bin 创建不存在的bin文件夹
2.PATH=~/.bin:$PATH 将bin目录添加到系统环境变量
3.curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
或从服务器的tools去获取
拉取代码
1. mkdir work 创建工作目录
2. repo init -u ssh://xxx.xxx.xxx.xxx/manifest.git 克隆manifest仓库
3. repo init -m xxx.xml 切换分支 服务器的分支文件在./repo/manifests中
4. repo sync
5. 查看当前所在服务器分支 ll .repo/manifest.xml
6. 查看所有分支 repo branches
一.android源码git介绍
android用repo管理,repo其实就是为了更好的管理多个git子项目,也就是说android源码中有多个git项目,每个含有.git的目录就是一个git子项目。
准备工作:
要切换到创建的本地分支上进行开发,否则push失败
repo start 本地分支 --all 在所有git仓创建本地分支
2.对某一个git子项目操作
如sensor_see 就是android源码中的一个git子项目
1. cd vendor/qcom/proprietary/sensors-see
2. repo init –m xxxx.xml 切换整个工程分支
repo sync
xxxx.xml 在 .repo/manifests 目录下
3. repo sync . 更新同步当前git仓的代码
repo sync 更新所有git仓同步到最新代码
4. repo start 本地分支 --all 在所有git仓创建本地分支
5. repo abandon branch_name 删除分支
6. cd 到具体路径修改代码
7. git add xxx(需要提交的文件)
8. git commit -m "提交注释"
9. repo upload . 只上传当前仓库的提交
如果多个仓库有commit,则可以执行repo upload,然后在弹框中去掉需要提交仓库前面的#即可
冲突
一. 与服务器代码冲突
退回到某个提交点
1. git reset --hard commit_ID ------ 强制回退:忽略本地修改点 慎用
2. git reset commit_ID ------ 回退:保留本地修改点
3.如何恢复
使用git reflog 可以看到reset之前的提交commit log
git reset commit_id 即可恢复
二. repo init 失败
“no matching key exchange method found. Their offer: diffie-hellman-group1-sha1”
在.ssh目录下新建config文件
vi ~/.ssh/config
添加
Host *
KexAlgorithms +diffie-hellman-group1-sha1
此方法只对当前用户生效,使用其他用户是又会报错
或修改/etc/ssh/ssh_config文件,在最末尾加入即可
KexAlgorithms +diffie-hellman-group1-sha1
modified状态:文件已修改,仅仅是修改,并没有进行其它操作。
通过git add可进入暂存(staged)状态,使用git checkout则丢弃修改,返因到unmodify状态。这个checkout很好理解,就是取出库中文件,覆盖当前文件吧。
unstaged:未暂存状态,即最后修改得文件。git add 后会变成staged状态