1、获取工程到当前路径
git clone ssh://gerrit-server/<工程名>.git
2、查看当前分支
git branch
3、切换分支
git checkout -b develop origin/featureFeb(featureFeb为分支名
4、查看代码状态
git status
5、添加差异代码(按照上一步提示)
git add 文件相对路径
6、修改git到编译器设置为vim
git config --global core.editor vim
7、提交改动到本地
git commit
8、从远程拉最新到代码到本地往服务器提交之前必须执行
git pull --rebase
9、本地解决冲突并运行代码,保证没有功能错误
10、提交改动到远程
git push origin featureFeb (featureFeb为分支名)
11、查整个团队到git日志
git log
12、使用补丁
接手其他同事未提交的工作,由同事现在本地将改动产生的差异打成补丁.patch文件。
拷贝.patch文件到自己工程的根目录下,注意要和同事使用同一个分支。
使用patch之前先pull一下,获取最新的代码
先检查patch文件:git apply --stat filename.patch
检查能否应用成功:git apply --check filename.patch
打补丁:git am --signoff < filename.patch
(使用-s或--signoff选项,可以commit信息中加入Signed-off-by信息)
13、查看本地已有的代码改动
git diff
一些情况的处理
获取远程最新代码不和本地merge,一般在本地删除 并执行git rm之后 使用如下命令找回误删文件
git fetch相当于是从远程获取最新版本到本地,不会自动merge
一般如有文件有冲突是不允许从远程获取代码的(git pull --rebase)
这时候需要吧没处理的文件放到暂存堆栈中 git stash
然后查看暂存堆栈 git stash list
从赞存堆栈顶回复之前到工作文件 git stash pop
解决冲突代码就可以继续操作了
---------------------------------------------------
已经成功提交成功代码 并且review 被merged,之后又有修改想做为一个新的提交,提交前没有pull --rebase ,导致,本地当前版本和服务器上的当前版本 不是一个版本
指针差异会导致pull失败。然后误操作 又cherry-pick回来了 。这样之前提交成功已经merged的操作页被拽回来了。
这种情况,用git reset HEAD^ --hard; 重新定义指针 ,然后提交之前再pull rebase一遍就OK了
------------------------------------------------------
遇到提交后的代码因为某种原因要在发布的版本中撤销之前开发的功能
1、git log 查之之前提交代码的comm ID
2、git revert commit-id 撤销提交 会生成一个反向的差异文件
3、如果之前有多次提交要撤销,记得按倒着的顺序revert,从最近的一次开始
4、最后解决冲突需要重新提交代码 ,因为之前revert多次,会有多个commit,可以用git把他们合并成一个commit 提交一次就可以了
git rebase -i HEAD~X (X是想把之前的多少步操作合并到一起,一个整数。之前看查log确认)
按照提示修改操作标识 按部就班就可以了
5、如果提交报错提示没有change-id,那么可以找回change-id
git commit --amend (这一个修改提交的命令,会调用生成change-id的脚本,之前执行revert 的操作没有调用此脚本所以没有change-id)
-------------------------------------------------------
如果要放弃本地修改后更新:
git reset --hard
git pull --rebase
-------------------------------------------------------
冲突解决
其中Updated upstream 和=====之间的内容就是pull下来的内容,====和stashed changes之间的内容就是本地修改的内容。
碰到这种情况,git也不知道哪行内容是需要的,所以要自行确定需要的内容。
-------------------------------------------------------
使用补丁后,改动代码push失败
git status 查看代码状态,看不到补丁中的更新内容
git log 可以看到同事的commit记录(补丁中的改动)
git commit 提交来自己补丁后的改动
git pull --rebase 获取最新代码 解决冲突
git push 的时候失败了,提示美没有change-id
按照提示为commit信息中添加chang-id 还是push失败
是因为使用的补丁,也算一个commit,里面没有chang-id
需要讲两次commit合并成一个commit
使用命令 git rebase -i 来调整之前的提交 (谨慎操作)可以改变历史commit的顺序,也可以合并两个commit
然后再用 git show HEAD 来看提交的代码改动。
确认无误之后 pull代码,解决冲突,push到服务器。
--------------------
撤销对某个文件的修改(commit之前)
当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- filefullname。
--------------------
成功push代码之后,发现commit的备注错了。
在gerrit上放弃本次提交,本地用git commit -amend修改之后,重新push失败。
放弃之后就不能重新提交了,此时的处理方式:
1、git reset HEAD^ 版本撤回上次提交
2、git status; 查状态 看到上次修改为 change after reset;然后git add -A 全部添加;git commit -m "remark" ,直接带着备注内容提交
3、git pull --rebase; git push ......
------------------------------------------------
1、解决冲突代码,编译通过
2、在当前临时分支 git add .
3、git rebase --continue
4、git pull --rebase
已经提交到gerrit的代码因为存在冲突,无法merge,pull --rebase 最新的代码。
代码中包含冲突,git status处于临时分支。
处理方式:
1、解决冲突代码,编译通过
2、在当前临时分支 git add .
3、git rebase --continue ,执行之后回到原来的分支; 如果回到原来的分支,在continue的时候又遇到了新的冲突,继续重复这些步骤解决
4、git pull --rebase
5、git push origin ………
-----------------------------------
撤销已经提交的commit(未push)
1、git log 查看commit记录,最新的在最上面,要撤销的commit在第1条
2、复制下随后第2调记录的commit-id
3、git reset --hard 刚才复制的commit-id;
执行之后,版本回到一次提交之后的状态,之前的改动全部丢失。