如何将git的master分支整个替换为另外一个分支

我有一个git仓库,其中master分支的代码已经落后几个月了,而另外一个blah分支却一直在持续提交。现在想把blah分支更名为master,同时也更新remote上的master。 这个操作似乎并不能用简单的git branch -m来解决。搜索发现也有不少人有类似需求,贴上解决方法。 方法一 如果blah分支能够快速merge到master分支,那么采用这个方法 git checkout seotweaks git merge -s ours master git checkout master git merge seotweaks 方法二 如果分支合并时出现了冲突,而你的remote仓库是github或者bitbucket,那么只能强上了 git branch -m master old-master git branch -m seotweaks master git push -f origin master 以上,我的情况只适合第二种,强上成功

配置windows上的git commit时的默认编辑器

在Win下使用github的Git Shell,每次commit时都会弹出记事本,使用不是太爽,想换成vim才顺手。操作步骤如下 安装gvim 将gvim的目录加入Path环境变量中,在 我的电脑 – 属性 - 高级 - 环境变量中修改 配置git git config –global core.editor gvim 重启Git Shell即可生效!

在Git下创建一个空分支

有时候我们需要在Git下创建一个空分支,从头开始Coding —— 这大概是那些重构帝最喜欢的事情。参考了github,才找到一个合适的方法。 怎样安全的进行这项操作 我们需要建一个“孤立”的空分支,为了尽可能的保证数据安全,最好还是重新clone一份代码。 $git clone https://github.com/user/repo.git # Clone our repo # Cloning into \’repo\’… # remote: Counting objects: 2791, done. # remote: Compressing objects: 100% (1225/1225), done. # remote: Total 2791 (delta 1722), reused 2513 (delta 1493) # Receiving objects: 100% (2791/2791), 3.77 MiB | 969 KiB/s, done. # Resolving deltas: 100% (1722/1722), […]

git flow使用经验小记

我在半年前开始在公司内推广使用git flow,控制版本发布流程,到目前为止效果令人满意。 但是实际使用过程中有一些小小的意外流程,完全照搬git flow的模型不太容易处理好。好在git本身就很灵活,碰到问题基本上都有办法绕过去。下面是我总结的一些特例情况下的处理办法。 测试/共享单独一个feature 有时候我们需要将一个feature独立测试,或者share给多人一块开发,那么可以将这个feature推到远程git库上,这可以利用git flow的publish功能搞定: git flow feature publish my_cool_feature 这会将 feature/my_cool_feature 分支push到远程git库,多人开发或者单独测试毫无压力。 feature在development分支测试完成,准备release的时候有另外一个未经测试的feature合并进来 已经完成测试的development被未经测试的提交污染了,这时候可以先本地回滚development分支,然后再进行git flow的release流程,例如: git checkout development git reset –hard 5cbadfe885d1eb514b3f07b3f269ca1a7f261e21 #假设测试通过的git rev是这个 git flow release start v1.0.1 git flow release finish v1.0.1 development上有个feature需要测试比较长时间,影响了一些耗时较短的feature发布 development分支上有个feature测试时间比较长一直释放不了,怎么办?—— 果断采用hotfix功能 git br -m feature/another_cool_feature hotfix/another_cool_feature 把耗时短的feature直接转换为hotfix,然后采用git flow的hotfix流程可以直接合并到master分支发布。

用git部署php站点

在小站点上,直接用git来部署php代码相当方便,你的远程站点以及本地版本库都有一个版本控制,追踪问题或者回滚是很轻松的事情。下面介绍用git部署时的设置步骤 在远程服务器的设置 假定你需要部署的代码在/var/www/yoursite cd /var/www/yoursite git init . git config receive.denyCurrentBranch ignore git config –bool receive.denyNonFastForwards false cd .git/hooks wget https://gist.githubusercontent.com/volca/9482044/raw/344a590af350b997db3819fa21426dfe8bc140f4/post-update chmod +x post-update 在本地git库中新增配置 [remote “prod”] url = your-ssh-username@your-host:/var/www/yoursite/ 这样就算设置完成了。 如果你想把本地的代码推送到远程服务器,下面简单的步骤就可以做到 git pull git push prod 注意事项 如果远程服务器上git的配置目录.git暴露在外部可访问的位置,请在web服务器上设置这个目录不可见。

git svn实战

我之前写了几个wordpress插件,比如inline-javascript, code-prettify。这些插件都托管在wordpress.org提供的svn服务器上,但是我实在太喜欢在git下活动了,因此动了点心思,想把插件代码传到github上,开发完之后利用git-svn传到wordpress的svn服务上。 照着这个思路,捋起袖子就开干了。 用git-svn抓取插件代码 wordpress的插件svn库大且缓慢,如果直接用git-svn去clone代码,一定会慢死,所以我按照以前的笔记,用git从大型svn快速clone代码。 以code-prettify插件为例,首先需要读取这个插件创建时的版本号 svn log http://svn.wp-plugins.org/code-prettify|tail -4|head -1 得到了如下信息,获得一个版本号 318479 r318479 | plugin-master | 2010-12-03 20:12:29 +0800 (五, 03 12 2010) | 1 line 开始clone代码 git svn clone -s –prefix=svn/ -r318479:HEAD http://svn.wp-plugins.org/code-prettify 设置git仓库 首先把代码传了一份到github: https://github.com/volca/code-prettify 然后操作本地git仓库 git branch -m svn git remote add origin git@github.com:volca/code-prettify.git git checkout master 本地svn分支对应svn的远程仓库,本地master分支对应github的远程仓库 Happy time 现在可以按照平常的习惯在git下更改代码,然后用git […]

试着开源LiteCloud项目

所谓LiteCloud,无非就是前些天提到的LightCloud的php版本实现。这个和原来的python版本有一些区别,会造成不兼容,如下: 把Consistent Hashing算法换成了ketama,在pecl的memcached扩展里有简单方法可以实现,效率比单纯的php好很多,能快个10倍吧。没有重复造轮子,因此我很是得意。 静态方法调用时,不再支持原来的system参数,原版是用这个来支持多个LiteCloud集群。 第一个版本,利用memcached扩展来读取tokyo tyrant,所以目前仅支持简单的操作比如get, set, delete, increment。其实再努力一下,也可以支持更多的功能,比如redis。 去掉了原版的local_cache功能,我觉得这个功能完全可以放在外面,更灵活。 项目主页 目前托管在github上 —— LiteCloud ,使用git以及github的时间不太长,但是很喜欢,欢迎fork。 使用示例 用静态方法调用: require ‘LiteCloud.php’; $config = array( ‘lookup1_A’ => ‘127.0.0.1:41201’, ‘lookup1_B’ => ‘127.0.0.1:51201’, ‘storage1_A’ => ‘127.0.0.1:44201’, ‘storage1_B’ => ‘127.0.0.1:54201’, ); list($lookupNodes, $storageNodes) = LiteCloud::generateNodes($config); LiteCloud::init($lookupNodes, $storageNodes); LiteCloud::set(‘hello’, ‘world’); print LiteCloud::get(“hello”); # => world LiteCloud::delete(“hello”); print LiteCloud::get(“hello”); # => nil 或者采用实例化的方式调用,这种方式能够支持多个LightCloud集群 […]

git的代码review工具

facebook在GitHub上托管了大量的开源项目,足足有26个。其中hiphop-php以及xhp在这阵子炒的比较热,的确是让人印象深刻的东西。顺手把别的项目翻出来看,也有很实用的工具,比如git-review。 git-review为git新增了一个很方便的代码review途径,利用这个命令,可以调用别的工具比如vimdiff来review代码的改动。下面简单记录一下使用的过程: 下载并安装 首先确认已经装好了git,剩下的事情比较简单。 git clone git://github.com/facebook/git-review.git cd git-review python setup.py install 这几步为git新增了一个review命令。 git-review的使用 查看指定版本的改动 git review 58e2fb834793f5c6c1fdd900a1c0224a44735962 出现提示 Now processing modified file foo.php foo.php [diff]> 由于我配置了diff工具为vimdiff,所以接下来就可以用vimdiff查看foo.php在58e2fb834793f5c6c1fdd900a1c0224a44735962这个版本与最新版本之间有什么不同。 查看两个版本之间的改动 git review 5b744bdc5f5bcbcfd6bb65f815aebe6bdce8c427 58e2fb834793f5c6c1fdd900a1c0224a44735962 在review每个代码之前,都可以使用help查看git review命令的帮助,如果放弃review,那么直接敲退出就可以了。

用git从svn里clone最后几个版本

一般情况下git svn clone这个操作会从第一个版本开始同步,如果版本号已经到了好几万(或更高?),这个操作会相当的费时。 当时还想着能不能hack一下git-svn脚本,其实后来看看文档,clone操作可以使用参数-r$REVNUMBER:HEAD检出指定版本后的代码,因此,更好的步骤应该是这样: svn info http://your-svn, 并记录最后的版本号,假设是260 假设要检出最后10个版本,做个简单的减法: 260 – 10 = 250 开始clone操作了 git svn clone -r250:HEAD –prefix=svn/ http://your-svn 按这个办法,clone的时间的确是减少了许多。

Git-svn on cygwin

开始试用最近比较红的git,我看中的是它的本地版本库功能,即便网络比较烂的时候,也可以在本地提交,等到了合适的时候一并传上去。由于以前的代码版本控制使用的是svn,所以我用git-svn过渡一下。 目前在windows下,最好的git客户端恐怕就是装一个cygwin。鼓捣了一个时辰,整理好一些可用的配置文件,陈列一下以备下次使用: ~/.bash_profile 偶尔还会使用svn验证一下check in的情况,刚转过来不放心啊,下面的配置是为了防止svn命令行乱码。命令行git-svn在/usr/sbin/git-core/路径下,是一个perl脚本,为了方便,我把这个路径加入了PATH环境变量。 export PATH=$PATH:/usr/sbin/git-core/ export SVN_EDITOR=vim export LC_ALL=en_US.UTF-16 export LC_CTYPE=en_US.UTF-16 export LANG=en_US.UTF-16 export XMODIFIERS=@im=Chinput3 stty cs8 -istrip stty pass8 export LESSCHARSET=latin1 ~/.inputrc 去掉注释即可 set meta-flag on set convert-meta off set input-meta on set output-meta on ~/.gitconfig [user] name = muhaha email = aa@bb.cc [color] diff = auto status = auto branch = […]