git fork使用方法 —— 回答来自chatgpt
在网上发现了一个比较有意思的项目,想自己修改下本地使用,于是fork到自己git,因为第一次使用fork,想看fork如何配合本地开发使用。
问chatgpt:git如何从把别人的项目copy到自己的git账号下,并监听别人git项目的变更,而本地又可以提交自己的变更。
chatgpt答:可以通过以下步骤实现:
1、在自己的git账号下创建一个新的空项目。
2、在本地使用git clone命令将别人 将自己的项目(此处原文说的是将别人项目clone下来,但根据我的实践,下面push到origin是别人的项目,所以应该是把自己的项目clone下来当做origin才对)clone到本地。
3、进入clone下来的项目目录,使用git remote命令将原始项目的地址添加到本地的remote列表中,例如:
git remote add upstream https://github.com/网上原始项目.git
4、使用git fetch命令从原始项目中获取最新的更新。
git fetch upstream
5、创建一个新的分支,并将原始项目的主分支合并到新分支中。
git checkout -b new_branch upstream/master
6、将新分支推送到自己的git账号下的项目中。
git push origin new_branch
7、现在你就可以在新分支上进行自己的修改和提交了。如果原始项目有更新,可以使用git pull命令将更新合并到本地,并将新的更新推送到自己的git账号下的项目中。
git pull upstream master
git push origin new_branch
这样就可以实现从别人的项目copy到自己的git账号下,并监听别人git项目的变更,同时本地也可以提交自己的变更。
很明显这并没有使用fork。
于是我又问道:为何不用git fork功能呢?
chatgpt回答:使用git fork功能也可以实现将别人的项目copy到自己的git账号下,并监听别人git项目的变更,同时本地也可以提交自己的变更。具体步骤如下:
1、在别人的项目页面上点击"fork"按钮,将别人的项目fork到自己的git账号下。
2、在本地使用git clone命令将自己git账号下的项目clone到本地。
3、进入clone下来的项目目录,使用git remote命令将原始项目的地址添加到本地的remote列表中,例如:
git remote add upstream https://github.com/网上原始项目.git
4、使用git fetch命令从原始项目中获取最新的更新。
git fetch upstream
5、创建一个新的分支,并将原始项目的主分支合并到新分支中。
git checkout -b new_branch upstream/master
6、将新分支推送到自己的git账号下的项目中。
git push origin new_branch
7、现在你就可以在新分支上进行自己的修改和提交了。如果原始项目有更新,可以使用git pull命令将更新合并到本地,并将新的更新推送到自己的git账号下的项目中。
git pull upstream master
git push origin new_branch
使用git fork功能的优势在于,fork的项目会自动与原始项目保持同步,同时也可以方便地向原始项目提交pull request。但是,如果只是想将别人的项目copy到自己的git账号下,并在本地进行修改和提交,使用上述方法(git clone再提交到到自己的git)也是可以的。
综上可见,git fork和“git clone后再提交到自己git”的操作基本一致,唯一不同的用处在于git fork可以申请提交到自己没有权限的项目,然后由作者考虑是否允许合并。
2024.01.09补充:
两种方式的第2步都应该是将自己的项目clone下来。第3步remote add后面必须是upstream,这是关键字,表示绑定上游仓库。
方式一可以跨平台,比如在gitee创建空白项目并clone,然后remote add原始项目(可以来自github),再按步骤执行后面的操作,可以将自己的分支推送到gitee(但是我实践发现这样推送到gitee的分支没有提交时间。。。如下图1,不知道是不是因为创建的主分支是空白的原因)
方式二fork的话貌似只能在同一个平台。