我在GibHub上有一个博客项目,我的一个朋友想把他的代码作为基础。他将对一些他不希望提交给我的文件(可能是样式表和图像)进行一些更改,但他可能会实现一个新功能,他希望将其推回到我的项目中。
他还应该能够从我那里获得新的代码,在那里他希望获得所有新的东西。
我看了看周围,看起来Rebase是他的方式,从我那里获得更新,但是他怎么才能最容易地把一个特性推给我呢?(他正在学习Git,和我一样)
发布于 2010-04-07 00:42:59
git clone git://yourrepo.com/project.git创建一个被跟踪的远程分支。这意味着拉取和推送操作是通过主分支自动完成的。跟踪分支可以是origin/dev或origin/master。随你怎么说。
git checkout --track -b mylocalbranch origin/trackedbranch在此之后,一个正常的git工作流程将通过本地提交等方式完成。有时候他应该这样做,
git pull --rebase这将执行rebase操作,该操作回滚他的更改,拉入对远程分支所做的更改,然后在此基础上重放其本地更改(解决任何冲突;执行任何合并)。
当他完成并想要使这些更改生效时,他应该让事情变得更新:
git pull --rebase # get most recent changes然后,对于一个裸存储库:
git push # push his changes to the main repo如果它是一个非裸存储库(比如您的主文件夹中的存储库或类似的存储库),那么最好是他通知您他已经准备好了,然后您再执行
git pull /path/to/his/repo通常建议不要推送到非裸存储库。原因是你可能在你的本地有未提交的更改,当他推到它的时候,混乱可能随之而来的是details。内核陷阱线程讨论此pit fall
发布于 2010-04-07 00:33:17
他应该创建一个分支来镜像你的“上游”分支,提交/合并/樱桃挑选他想要推到上游的提交,有时还会对你的repo中的一个分支进行git-push。然后,您应该检查该分支中的提交,并将它们合并到您的主分支。
发布于 2010-04-09 04:05:59
这看起来像是在描述一个工作流程,其中一个功能与主分支同时开发。上面的答案是好的,但应该注意的是,"rebase“并不总是必要的。特别是对于git初学者来说,因为rebase相当于历史修改,是一个中间概念,如果你想在提交历史中保留分支的位置和时间的信息,它并不总是你想要的。
当你的朋友想要从你的主分支引入更改时,他总是可以使用普通的香草合并而不是rebase:
git fetch origin
git merge origin/master # or any branch he wants to merge other than "master"当你想要拉回你朋友的修改时,你可以做一个类似的操作:
git fetch friend
git merge friend/feature # choose any of your friend's branches to merge with your current如果您有他的存储库的URL (本地或其他),则上述工作流可以工作。如上所述,推送到非裸存储库(您的)是危险的。如果你需要你的朋友能够推送,使用一个公共的,裸露的存储库。
如果您只想从朋友的分支中选择特定的修订版本来拉取,请使用cherry-pick命令:
git fetch friend
git log friend/feature # or `git log friend`
# find the commit you want to cherry pick, then
git cherry-pick <commit>https://stackoverflow.com/questions/2586518
复制相似问题