Github无法访问/访问慢的经验
github经常会因为一些原因抽风,无法访问,这时候,可以使用gitee同步github项目,然后从gitee拉项目。在gitee导入项目以后,项目名称后面有个同步的图标,可以随时点击与github同步。然后就可以本地git pull同步gitee的代码了。
我的经验是
# 本地origin:master->github/kimmking:mastergit clone /kimmking/incubator-shardingsphere
然后添加两个远程:
git remote add gitee /kimmking/incubator-shardingspheregit remote add apache /apache/incubator-shardingsphere
这样如果github不可用的时候,可以通过gitee操作,然后再可用的时候同步到github;
如果github慢,就更简单的,因为我们每次改动的很少,所以只要同步到了当前最新代码,我们提交commit和push的数据很少,可以git push成功。
分支开发的经验
1、可能同时有几个不同的目的想修改项目代码,所以最好每个修改都在自己的单独分支上,相互不干扰。比如修改一个issue3939,就从当前最新的代码拉一个issue3939的分支,用完pr被merge到apache/master就可以删掉。
git branch -b issue3939
修改完,提交到github并自动创建分支:
git push --set-upstream origin issue3939
2、可以自己在github上fork本项目,这样clone拉下来,默认origin:master -> 自己id:master,然后让这个分支一直跟apache:master同步。例如:
git clone /kimmking/incubator-shardingsphere
具体做法,我是本地再添加apache的remote,然后拉到本地为amaster。
git remote add apache /apache/incubator-shardingspheregit fetch apache master:amastergit checkout amastergit branch --set-upstream-to=apache/master
每天早上先:
checkout amastergit pullgit push -f origin amaster:mastercheckout mastergit pull
这时,本地和origin远程的master,就都和apache/master同步了。随时拉的分支,都是基于最新代码的,pr合并到主干冲突的可能性就最小。
3、如果我们的修改,当天没有提交和pr,建议这么同步。同时执行,
git checkout issue3939git merge master
把最新的改动合并到我们正在操作的分支上。
一些有用命/Github令
1、git branch -vv,查看当前本地有哪些分支,已经对应的远程分支和当前最后一次提交信息:
$ git branch -vvamaster 33acaa6 [apache/master] Abstract visitor determine logic to a central class (#4418)gmaster 33acaa6 [gitee/master] Abstract visitor determine logic to a central class (#4418)* master 33acaa6 [origin/master] Abstract visitor determine logic to a central class (#4418)
带星号的为当前分支。
查看所有分支:
$ git branch -arapache/3.1.0-SNAPSHOTapache/4.0.0-RC3-Milestone-0.1apache/4.0.1apache/4.0.1-releaseapache/devapache/dev-4.xapache/docs5.xapache/masterapache/orchestration-5.xapache/proxy-with-netty-backendapache/sharding-parser-5.xapache/sharding-scalingapache/sharding-scaling-uigitee/masterorigin/3.1.0-SNAPSHOTorigin/4.0.0-RC3-Milestone-0.1origin/4.0.0-RC3-releaseorigin/4.0.1origin/HEAD -> origin/devorigin/adevorigin/amasterorigin/devorigin/fix_config_pathorigin/issue3896origin/issue3929origin/master
2、git log,显示日志
如果想简单的查看,可以让每个commit只显示一行:
$ git log --oneline -10
3、git reset,回滚提交
回滚两个版本,不改变当前修改的代码:
$ git reset --soft head~2
然后可以用git status来查看有哪些变动。
这个办法可以用来压缩多次不合理的、同一个目的的提交,重新变成一次提交。
如果想让代码也改变到2个版本之前的状态,可以把soft改为hard。
如果想把当前修改都未提交的代码回滚到最后一次提交状态,也可以用:
$ git reset --hard head
如果想回滚到某一次具体的提交:
$ git reset --hard 33acaa6
4、git fetch,拉取远程代码
拉一个具体分支:
$ git fetch apache master:kk01
同步本地仓库和所有远程分支:
$ git fetch --all
5、git-extras,特别推荐一个git命令行插件
MacOS下可以直接用brew安装;
Linux可以yum或apt-get安装。
Windows需要在git clone /tj/git-extras
$ install.cmd "C:git" # 假设C:git 为git安装目录
具体可以参考:/tj/git-extras/blob/master/Installation.md
然后就可以使用一些很好玩的命令了:
git summary #显示项目的统计信息,比如每个人贡献比例git info #跟svn info一样
git pr 3939 apache #从github/apache下把pr#3939拉到本地成为一个分支,review代码特别有用
等等。。。