首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何最好地使用"forked“的git代码库,并将一些新特性推送回原点。

如何最好地使用"forked“的git代码库,并将一些新特性推送回原点。
EN

Stack Overflow用户
提问于 2010-04-07 00:28:11
回答 3查看 146关注 0票数 1

我在GibHub上有一个博客项目,我的一个朋友想把他的代码作为基础。他将对一些他不希望提交给我的文件(可能是样式表和图像)进行一些更改,但他可能会实现一个新功能,他希望将其推回到我的项目中。

他还应该能够从我那里获得新的代码,在那里他希望获得所有新的东西。

我看了看周围,看起来Rebase是他的方式,从我那里获得更新,但是他怎么才能最容易地把一个特性推给我呢?(他正在学习Git,和我一样)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-07 00:42:59

代码语言:javascript
运行
复制
git clone git://yourrepo.com/project.git

创建一个被跟踪的远程分支。这意味着拉取和推送操作是通过主分支自动完成的。跟踪分支可以是origin/dev或origin/master。随你怎么说。

代码语言:javascript
运行
复制
git checkout --track -b mylocalbranch origin/trackedbranch

在此之后,一个正常的git工作流程将通过本地提交等方式完成。有时候他应该这样做,

代码语言:javascript
运行
复制
git pull --rebase

这将执行rebase操作,该操作回滚他的更改,拉入对远程分支所做的更改,然后在此基础上重放其本地更改(解决任何冲突;执行任何合并)。

当他完成并想要使这些更改生效时,他应该让事情变得更新:

代码语言:javascript
运行
复制
git pull --rebase # get most recent changes

然后,对于一个裸存储库:

代码语言:javascript
运行
复制
git push # push his changes to the main repo

如果它是一个非裸存储库(比如您的主文件夹中的存储库或类似的存储库),那么最好是他通知您他已经准备好了,然后您再执行

代码语言:javascript
运行
复制
git pull /path/to/his/repo

通常建议不要推送到非裸存储库。原因是你可能在你的本地有未提交的更改,当他推到它的时候,混乱可能随之而来的是details。内核陷阱线程讨论此pit fall

票数 5
EN

Stack Overflow用户

发布于 2010-04-07 00:33:17

他应该创建一个分支来镜像你的“上游”分支,提交/合并/樱桃挑选他想要推到上游的提交,有时还会对你的repo中的一个分支进行git-push。然后,您应该检查该分支中的提交,并将它们合并到您的主分支。

票数 2
EN

Stack Overflow用户

发布于 2010-04-09 04:05:59

这看起来像是在描述一个工作流程,其中一个功能与主分支同时开发。上面的答案是好的,但应该注意的是,"rebase“并不总是必要的。特别是对于git初学者来说,因为rebase相当于历史修改,是一个中间概念,如果你想在提交历史中保留分支的位置和时间的信息,它并不总是你想要的。

当你的朋友想要从你的主分支引入更改时,他总是可以使用普通的香草合并而不是rebase:

代码语言:javascript
运行
复制
git fetch origin
git merge origin/master  # or any branch he wants to merge other than "master"

当你想要拉回你朋友的修改时,你可以做一个类似的操作:

代码语言:javascript
运行
复制
git fetch friend
git merge friend/feature  # choose any of your friend's branches to merge with your current

如果您有他的存储库的URL (本地或其他),则上述工作流可以工作。如上所述,推送到非裸存储库(您的)是危险的。如果你需要你的朋友能够推送,使用一个公共的,裸露的存储库。

如果您只想从朋友的分支中选择特定的修订版本来拉取,请使用cherry-pick命令:

代码语言:javascript
运行
复制
git fetch friend
git log friend/feature  # or `git log friend`
# find the commit you want to cherry pick, then
git cherry-pick <commit>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2586518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档