git fork clone 区别_我的Git笔记

db5f950d9de0386a4117f460b2737228.png

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

6247f82c124512e78dae6eff3687ae50.png

fork

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

564f235e26f225cfbd8a0ce1baafc75e.png

现在,随意更改这个项目都不会影响原来的项目。

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
14ea5f19e9d61ca38c09db5b7d670605.png

git status

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

git diff README.md
2eba991831175c265245618942c04d14.png

git diff

可以看到我删除了一行,并加了一行,内容是一个>。

如果要撤销修改,可以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:

// 添加upstreamgit 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 mastergit 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:

98f361e95bab32aebcac65e21dbc3e98.png

pull request

删除test分支

我们的代码被合并之后,也不再修改,需要将test分支删除,如下:

// 1. 删除远程分支git push origin —delete test// 2. 删除本地分支git branch -d test

整个流程就是这样。

参考:

  1. http://www.ruanyifeng.com/blog/2015/12/git-workflow.html
  2. https://blog.zfanw.com/best-practice-contribute-on-github
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值