Liu Shouda coder

git cherry pick

2016-08-17
 

考虑一个问题: 使用git做版本管理。如何在保持自己分支代码与主分支一致尽量一致的情况下,随时将可应用与主分支的bug修复提交的主分支,而其余feature代码则保留在自己分支上。

kaldi为例子。原始仓库是kaldi-asr/kaldi, fork到vsooda/kaldi。然后在vsooda/kaldi下开分支tts作为功能开发。master分支作为与原来仓库的同步作用。在tts整个分支成熟之前,肯定是不能提交到master分支的。

kaldi-asr/kaldi及时更新代码,只需要将其设置为upstream,再及时同步即可。

git remote add upstream [https://github.com/kaldi-asr/kaldi.git]
git fetch upstream
git checkout master
git merge upstream/master

现在考虑另一个问题,在tts开发时候,发现了一些小bug。修复之后怎么提交给原仓库呢。直接提交到tts分支,似乎很难?那么常用的做法就是stash,切到master分支,再修改重新编辑一遍,测试(这时候如果主分支没有测试环境就蛋疼了),提交,pull request。

另一种做法是:

直接提交到tts分支,测试,stash,cherry-pick,再测试,提交,pull request。

具体案例:

git add ../../wsj/s5/utils/subset_data_dir_tr_cv.sh  #bug修复
git commit -m 'fix the bug occur when only have one speaker'
git stash #贮存本地其余更改
git checkout master
git cherry-pick c338e7b95f75677407fcfb4e281167056bb52cf4 #commit id
git push
git checkout tts #切回分支
git stash pop #取回贮存

上一篇 idlak特征解析

Content