Github无法访问/访问慢的经验
github经常会因为一些原因抽风,无法访问,这时候,可以使用gitee同步github项目,然后从gitee拉项目。在gitee导入项目以后,项目名称后面有个同步的图标,可以随时点击与github同步。然后就可以本地git pull同步gitee的代码了。
我的经验是
# 本地origin:master->github/kimmking:master
git clone https:// github.com/kimmking/inc ubator-shardingsphere
然后添加两个远程:
git remote add gitee https:// gitee.com/kimmking/incu bator-shardingsphere
git remote add apache https://gitee.com/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 https://github.com/kimmking/incubator-shardingsphere
具体做法,我是本地再添加apache的remote,然后拉到本地为amaster。
git remote add apache https://github.com/apache/incubator-shardingsphere
git fetch apache master:amaster
git checkout amaster
git branch --set-upstream-to=apache/master
每天早上先:
checkout amaster
git pull
git push -f origin amaster:master
checkout master
git pull
这时,本地和origin远程的master,就都和apache/master同步了。随时拉的分支,都是基于最新代码的,pr合并到主干冲突的可能性就最小。
3、如果我们的修改,当天没有提交和pr,建议这么同步。同时执行,
git checkout issue3939
git merge master
把最新的改动合并到我们正在操作的分支上。
一些有用命/Github令
1、git branch -vv,查看当前本地有哪些分支,已经对应的远程分支和当前最后一次提交信息:
$ git branch -vv
amaster 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 -ar
apache/3.1.0-SNAPSHOT
apache/4.0.0-RC3-Milestone-0.1
apache/4.0.1
apache/4.0.1-release
apache/dev
apache/dev-4.x
apache/docs5.x
apache/master
apache/orchestration-5.x
apache/proxy-with-netty-backend
apache/sharding-parser-5.x
apache/sharding-scaling
apache/sharding-scaling-ui
gitee/master
origin/3.1.0-SNAPSHOT
origin/4.0.0-RC3-Milestone-0.1
origin/4.0.0-RC3-release
origin/4.0.1
origin/HEAD -> origin/dev
origin/adev
origin/amaster
origin/dev
origin/fix_config_path
origin/issue3896
origin/issue3929
origin/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 https://github.com/tj/git-extras
$ install.cmd "C:git" # 假设C:git 为git安装目录
具体可以参考:https://github.com/tj/git-extras/blob/master/Installation.md
然后就可以使用一些很好玩的命令了:
git summary #显示项目的统计信息,比如每个人贡献比例
git info #跟svn info一样
git pr 3939 apache #从github/apache下把pr#3939拉到本地成为一个分支,review代码特别有用
等等。。。