
每次用到git
,总会遇到一些问题,所以写这篇文章记录一下。

等fork
完之后,你可以在自己的仓库中看到同名的项目,URL的形式:https://github.com/your_name/repo_name,如下是我fork
的项目:

现在,随意更改这个项目都不会影响原来的项目。
clone项目
把fork
的项目拉到本地:
// clone 到本地的 repo_name 目录
git clone https://github.com/your_name/repo_name repo_name
创建branch
进入仓库目录后,可以使用如下命令创建并切换到test
分支
cd repo_name
// 创建并切换到 test 分支
git checkout -b test
修改本地仓库,并commit
在这个test
分支下经过一些修改后,需要先提交这些修改到本地仓库
// 查看修改
git status

status
命令可以看到我们修改了哪些文件,使用diff
命令将修改的文件和原文件对比,查看具体修改内容:
git diff README.md

可以看到我删除了一行,并加了一行,内容是一个>
。
如果要撤销修改,可以ctrl+z(command+z)
,但status
命令已经提示了,使用checkout
命令可以撤销(discard)修改:
// 注意,是2个减号
git checkout — README.md
使用如下命令提交我们的修改:
// 添加所有修改、删除、新增的文件
git add -A
// 或者,添加指定文件
git add README.md
// 记下做了哪些修改,简明一点就行
git commit -m “修改说明”
将我们的项目和原始项目合并
前面已经说过,我们fork
的项目不会影响到原始项目,同样,原始项目的更新也不会影响到我们的项目。现在,就会有这样一个问题,原始项目有很多人维护,每天都在更新,而我们的项目在修改完提交Pull Request
时,已经落后原始项目好几个版本,这时提交就会有冲突,结果就会被拒绝。
为了解决这个问题,我们需要再添加一个remote
配置,暂且叫它upstream
,区别于origin
,upstream
用来同步本地仓库的。在默认情况下,clone
完之后,git自动将origin
指向我们自己的项目地址的,可以使用如下命令查看:
// 2个verbos查看远程仓库详细信息
git remote -vv
现在,添加upstream
:
// 添加upstream
git remote add upstream [git@github.com](mailto:git@github.com):repo_owner/repo_name.git
现在假设原始仓库更新并提交了很多次,我们本地代码已经落后很多,为了保持同步,可以通过如下命令拉取:
// 切换到master分支
git checkout master
// 使用 rebase 模式拉取 upstream/master 上的更新
// 且与本地的 master 合并, 第一个 master 是远程分支,第二个是本地分支
git pull --rebase upstream master:master
// 切换到前面建立的 test 分支
git checkout test
// 使用 rebase 模式合并本地的 test 和 master 分支
git rebase master
当然,还可以通过如下方式:
// 切换到 master 分支
git checkout master
// 获取 upstream 上的 master 分支
git fetch upstream master
git checkout test
//使用 rebase 模式合并本地的 test 和 upstream/master 分支
git rebase upstream/master
总的来说,所有本地的改动都不会直接在 master
上面进行。通过新建upstream
分支,可以把本地的 master
分支当作一个只负责从上游获取更新的分支,先将上游的 master
和本地的 master
合并,此时,保证本地的 master
是上游的最新版本,再通过合并 test
和本地的 master
来完成本地改动的更新。
注意:使用
rebase
时应当小心一点,这会影响到已经提交的代码
推送(push)到远程仓库
完成修改和同步后,需要将本地修改的代码推送到github
:
// 将本地 test 分支的代码 push 到 origin 的 test 分支
// 如果该分支不存在则会创建
git push origin test
发起合并请求(Pull Request)
代码提交后,登录到GitHub
,页面上就会提示我们发起Pull Request
:

删除test分支
我们的代码被合并之后,也不再修改,需要将test
分支删除,如下:
// 1. 删除远程分支
git push origin —delete test
// 2. 删除本地分支
git branch -d test
整个流程就是这样。
参考:
- http://www.ruanyifeng.com/blog/2015/12/git-workflow.html
- https://blog.zfanw.com/best-practice-contribute-on-github/
欢迎关注我的公众号:

网友评论