在分支中跟踪某人的GitHub仓库

时间:2010-05-06 05:07:50

标签: git branch github tracking pull

我对Git很新,到目前为止很喜欢它,但我不确定这里做了什么。

我已经分叉了一个github项目,目前正在将它移植到另一种语言。作为参考,我创建了代码的一个分支,就像我制作fork时一样。我现在的问题是原始项目已经更新,我无法弄清楚如何将这些更改从原始主程序中提取到我的分支中(因为“origin”指向我的github项目)。

我自己的教育的后续问题,原始项目的所有者必须运行什么命令才能将我的分支机构的变更纳入他的主分支?

编辑:这些答案在我从我自己的'主'分支运行时起作用,但是当我从我的'跟踪'分支运行它们时(我在松散地使用这个术语因为我知道git命令同名。不知道它的作用,但是)。

当我进入非主分支并运行git fetch upstream时,没有任何反应。当我尝试git fetch upstream:master时,它会说

ssh: upstream: no address associated with name
fatal: The remote end hung up unexpectedly

4 个答案:

答案 0 :(得分:3)

您可以使用git remote添加原始仓库:

$ git remote add upstream http://github.com/user/repo.git

(如果需要,您可以将其称为upstream以外的其他内容,但这是您用来引用遥控器的名称。)

要获得更新,请运行:

$ git fetch upstream

为了从您的仓库获取更改到上游仓库,维护人员必须将您的仓库添加为远程仓库,然后提取更改:

$ git remote add drhorrible http://github.com/youruser/yourrrepo.git
$ git pull drhorrible your-branch:master

或者,如果上游维护者不想将您的仓库添加为远程,他可以直接引用它:

$ git pull http://github.com/youruser/yourrepo.git your-branch:master

答案 1 :(得分:1)

您可以将其添加到远程回购列表中并从中获取/提取

$ git remote add first-repo-name git://github.com/first-repo-name/repo.git
$ git fetch first-repo-name
# or:
$ git pull first-repo-name

git pull实际上会将第一个repo-name主分支合并到您的主分支(如果您当前在该分支中)

  

原始项目的所有者必须运行什么命令才能从我的分支机构转换到他的主分支?

在GitHub方面,这不是一个实际的命令,而是你发起的pull request的结果。

alt text http://img.skitch.com/20080223-1njj3f5559un2eyt51j92t2xkf.png

从技术上讲,他可以在你的本地仓库中添加你的分叉仓库作为远程仓库(就像你上面所做的那样),但如果他的仓库大量分叉,这就变得不实用了,因此中央的“拉动请求”机制。 / p>

答案 2 :(得分:0)

Git应该像这样工作,你将更改从你的原点(无论是分叉的回购,还是原始的)拉到你的本地主人。然后,您将使用git-merge或git-rebase将它们放入您的本地分支。一旦你对结果感到满意,你就可以回到遥控器。

我想从你提出问题的方式来看,在你从原始回购中提取更改后,最好使用git-rebase来修改主分支。

如果您尝试从命令行完成所有这些操作,那么您将需要学习git-cherry。否则,像gitx或gitk这样的工具对选择要合并的提交非常有帮助。

答案 3 :(得分:-1)

Github的分叉帮助很好地解释了它:

http://help.github.com/forking/