1. 从一个git仓库迁移到另外一个git仓库
-
从原地址克隆一份裸版本库,比如原本托管于 GitHub。
git clone --bare git://github.com/username/project.git
–bare 创建的克隆版本库都不包含工作区,直接就是版本库的内容,这样的版本库称为裸版本库。 -
然后到新的 Git 服务器上创建一个新项目,比如 GitCafe。
-
以镜像推送的方式上传代码到 GitCafe 服务器上。
cd project.git
git push --mirror git@gitcafe.com/username/newproject.git
–mirror 克隆出来的裸版本对上游版本库进行了注册,这样可以在裸版本库中使用git fetch命令和上游版本库进行持续同步。 -
删除本地代码
cd …
rm -rf project.git -
到新服务器 GitCafe 上找到 Clone 地址,直接 Clone 到本地就可以了。
git clone git@gitcafe.com/username/newproject.git
这种方式可以保留原版本库中的所有内容
2. git cherry-pick
cherry-pick的作用是,将某次或者某几次的提交,在另一个分支上进行重演。
- 在自己的分支上切新的分支
- 选择逐一cherry-pick还是合并commit
- 合并commit方法:
- git log查看commit信息
- git reset到需要合并的前一个
- 再提交一次commit(合并以前的commit会丢失)
- 另一种合并commit方法 (https://blog.csdn.net/yuanfang_way/article/details/78970709):
- git rebase -i HEAD~3
- 到master分支上拉最新的再切新的分支
- cherry-pick合并的commit
- push一把就可以提pr了
3. git rebase or git merge
- merge会造成多一次的commit提交记录,并且提交记录是按照各个提交时间排列的。
- rebase不会造成多一次的committ提交记录,并且b分支的所有commit顶到最顶端。
- merge操作只需要解决一次冲突,但对这个分支的纯洁性是有毁灭性的,如果merge发现冲突过多,回滚起来麻烦。
- rebase操作则可能基于某个文件解决多次冲突,如果发现冲突过多,随时可以abort 恢复原来的状态