声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:http://blog.csdn.net/llg8212
内容系本人学习、研究和总结,如有雷同,不胜荣幸!
git - 简易指南
收藏:http://rogerdudler.github.io/git-guide/index.zh.html
下载代码:
gitclonehttps://github.com/openstack/nova.git
nova.git表示下载nova的代码,其它模块替换成XXX.git即可。
在分支上修改代码并提交的过程
1,创建分支:
下载代码后,可以建立分支,并在分支上修改代码。创建分支的目的是每一个分支的修改不影响其它分支(必须commit,没有commit的代码修改每个分支都可见)
命令为:git branch XXX名字可以为:bug/bug_id,便于记忆
2,切换分支git checkout XXX
3,查看git状态,包括哪些代码没上库git status
4,查看修改对比git diff xxx/yyy/zzz.py
5,将修改打上add标记git add xxx/yyy/zzz.py
6,提交代码git commit -a注:-a可以直接提交全部修改
提交代码时需要添加备注信息。例:
Remove unused imports in glance标题
There are some unused import in glance, such as 'import domain' inv2.image_data.py.
Closes-Bug:#1264245关联的bug
7,提交review到社区git review。review代码之前必须保证代码是最新的:1)通过git checkout master切换到主分支; 2)使用git pull origin master更新代码; 3)切换回自己的分支; 4)使用git rebase -i master合并主干代码; 5)如果没有冲突,则执行提交。如果有冲突,会显示有冲突的文件,解决冲突后重新git commit -a --amend 后在review。
注1:对于已经提交过的,使用git commit -a –amend,这样之前的备注信息都保留。
注2:如果本地没有之前提交的review分支了,可以直接从自己提交的review下载代码。在提交的patch有download地址,复制下来执行即可。地址实例:git fetch https://review.openstack.org/openstack/novarefs/changes/41/64241/4 && git checkout FETCH_HEAD
注3:bp的提交过程也一样
注4:如果本地已经没有分支信息,可以通过git review -d 64241下载自己提交的代码。64241就是注2中的数字。
注5:建议使用root用户操作 git,非root用户可能引起一些不必要的错误。
git回退
修改的代码测试ok了,但由于一些操作 例如 reset, rebase 和 merge发现修改好的代码都没有了,真是件头疼的事。
但不用着急,git具有回退到指定版本的功能。参考文档:http://www.oschina.net/news/26241/you-can-not-change-git-history
使用git log查看日志信息,然后找到要回退的版本,使用git reset --hard 版本号即可。
git合并
git review代码是,如果出现冲突,会造成提交不成功。错误信息包含如下内容:
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am --abort".
使用git status可以看到冲突的文件。冲突的文件必须人工干预,需要按如下步骤操作:
1,解决冲突
2,使用git add 冲突的文件
3,git am --resolved
中间如果处理乱了,用 git reset 恢复即可,所以合并 patch 在一个“干净”的分支上处理更好。
git合并主干代码
1,使用git checkout master切换到主干分支
2,使用git pull origin master更新主干最新代码
3,切换回自己工作的分支
4,使用git rebase -i master从主干合并最新的代码。
5,使用git status查看是否有冲突,如果没有冲突,就不需要做处理,如果有冲突会显示如下信息(使用git status查看会发现不在任何分支):
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: heatclient/common/utils.py
# both modified: heatclient/v1/shell.py
6,手动解决冲突,解决完后使用git add 添加冲突的文件
7,执行git rebase --continue就会切换到自己的分支了
8,再使用git commit -a --amend来提交代码就ok了。