Git新手必备常用命令
1、获取工程到当前路径
git clone ssh://gerrit-server/<工程名>.git
2、进入工程目录
cd <工程名>
3、安装gerrit的changeID自动生成hook脚本
scp -p gerrit-server:hooks/commit-msg .git/hooks/
chmod u+x .git/hooks/commit-msg
4、查看当前分支
git branch
5、切换分支
git checkout -b develop origin/featureFeb (featureFeb为分支名)
6、查看代码状态
git status
7、添加差异代码(按照上一步提示)
git add 文件相对路径
8、修改git到编译器设置为vim
git config --global core.editor vim
9、提交改动到本地
git commit
10、再文件到开头写入注释,开头结尾都留一个空格、保存推出
10.1、commit后发现代码分支提交错了,需要先切回正确分支
10.2、查操作log 找到要commit的<操作ID>
git reflog
10.3、撤回commit
git cherry-pick <操作ID>
10.4 查当前状态 重新commit
11、从远程拉最新到代码到本地 往服务器提交之前必须执行
git pull --rebase
12、本地解决冲突并运行代码,保证没有功能错误
13、提交改动到远程
git push origin featureFeb:refs/for/featureFeb (featureFeb为分支名)
14、查整个团队到git日志
git log
15、到girret系统看自己代码指派同事reviewhttp://git.d.xiaonei.com/review/#/q/status:open,n,z
到此一个提交流程就结束了
有时可能会用到其他操作
A、本地代码某一部分改乱了 想重新获取
git checkout ./<需要更的路径>
---------------一些情况的处理----------------------------------
获取远程最新代码不和本地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也不知道哪行内容是需要的,所以要自行确定需要的内容。