use git clone --depth <number> to clone your local version(18-10-31 encountered)

问题背景:

某同学在 GitHub 仓库初始化了一个前端空项目,有三个文件:README.MD、.gitignore、LICENSE。

实际准备开发时,使用 ant-design-pro 作为脚手架, 脚手架中包括这三个文件,但和初始化项目中的内容不同,最终项目的 README 和 LICENSE 使用初始化项目中的,.gitignore 使用 ant-design-pro 里的

使用下面命令,从 GitHub 仓库中直接安装最新的脚手架代码

1
$ git clone https://github.com/ant-design/ant-design-pro.git --depth=1

进入 ant-design-pro 目录,删除远程仓库

1
2
$ cd ant-design-pro
$ git remote rm origin

添加远程仓库

1
2
3
4
$ git remote add origin https://github.com/wfk007/test.git
$ git remote -v
origin https://github.com/wfk007/test.git (fetch)
origin https://github.com/wfk007/test.git (push)

执行 git pull,第一个坑来了

1
2
3
4
5
6
7
8
9
10
$ git pull origin master
warning: 没有共同的提交
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
展开对象中: 100% (3/3), 完成.
来自 https://github.com/wfk007/test
* branch master -> FETCH_HEAD
* [新分支] master -> origin/master
fatal: 拒绝合并无关的历史

stackoverflow 上找到加 --allow-unrelated-histories 的解决方案,再次执行命令

1
$ git pull origin master --allow-unrelated-histories

手动解决冲突、推到远程仓库

1
2
3
$ git add -A
$ git commit -m':sparkles: ant-design-pro'
$ git push origin master

执行 git push 的时候,终端又报错了,第二个坑来了

1
2
3
4
5
6
7
8
9
10
11
$ git push origin master
枚举对象: 494, 完成.
对象计数中: 100% (494/494), 完成.
使用 8 个线程进行压缩
压缩对象中: 100% (440/440), 完成.
写入对象中: 100% (490/490), 254.47 KiB | 84.82 MiB/s, 完成.
总共 490 (差异 40),复用 469 (差异 30)
remote: Resolving deltas: 100% (40/40), completed with 1 local object.
To https://github.com/wfk007/test.git
! [remote rejected] master -> master (shallow update not allowed)
error: 推送一些引用到 'https://github.com/wfk007/test.git' 失败

stackoverflow 又来续命,似乎是在克隆时使用 --depth <number> 的问题

1
2
$ git remote add old https://github.com/ant-design/ant-design-pro.git
$ git fetch --unshallow old

再执行 git push origin master 成功,成功后记得使用 git remote rm old,删除远程 old 仓库

The end.

Git

1
2
3
4
5
git push -u origin develop
将本地 develop 分支推送到远程 develop 分支并 pull request,-u 参数指定一个默认主机

git checkout -b develop origin/develop
在远程 develop 分支的基础上,在本地创建一个 develop 分支

合并分支之前一定要确保被合并分支是最新的

1
2
3
4
5
git pull origin develop
git checkout develop
git merge some-feature
git push
git branch -d some-feature

与主干同步?

1
2
$ git fetch origin
$ git rebase origin/master

合并提交:如果你希望得到线性的历史,你可以在执行 merge 之前将功能 rebase 到 master 分支的顶端,产生一个快速向前的合并