在GitHub中合并分叉

R. *_*des 256 git github

我分叉了一个GitHub存储库.然后我把一些更改推到了我的前叉.然后原始存储库合并了我的更改和其他一些.现在,我想合并那些我不知道的变化.我尝试了一个简单的拉动,然后是推送,但是这会让我的提交重复一次.最好的方法是什么?

Jim*_*uls 350

您可能每个存储库都有一个"远程".您需要从一个遥控器拉出并推到另一个遥控器.

如果你最初从你的fork克隆,那个遥控器将被称为"origin".如果您尚未添加它,则需要将第一个人的存储库添加为另一个远程:

git remote add firstrepo git://github.com/first/repo.git
Run Code Online (Sandbox Code Playgroud)

在完成所有设置之后,您确实应该能够

git pull firstrepo master
git push origin
Run Code Online (Sandbox Code Playgroud)

请记住,git pull无非是做宏更git fetchgit merge,按照这个顺序.您只需要从第一个人的存储库中获取提交列表,然后将其分支合并到您的树中.合并应该对两个分支上的提交做正确的事情.

当然,GitHub在其所有永恒的真棒中为您提供了一条捷径.在您的存储库的分支上有一个"快进"按钮,如果您完全合并到另一侧,您可以使用它来捕获您的分叉.

  • @cweiske - 这个Merge按钮在哪里?我看了整个管理页面和主页,但找不到它:(. (13认同)
  • @Adam,它在Pull Request页面上.因此,forker会打开一个Pull请求,将其中一个分支合并到你的一个分支中.在那里你可以点击合并按钮. (2认同)
  • 按钮[快进](https://github.com/blog/266-fast-forward-your-fork)似乎不再可用.有关信息,我在我的命令中使用了另一个[tag:Git] URL:`git remote add snaury git@github.com:snaury/script-runner` (2认同)

Bob*_*ryn 71

所以上面接受的答案对我来说并不完美.也就是说,它似乎在它工作时失去了与原始github作者的链接,然后在那之后似乎不再起作用了.我认为问题是答案遗漏了远程名称和分支之间的/.因此,它将从远程获取一个名为master的分支,但之后无法对其执行任何操作.不确定为什么.

这是github从他们的网站推荐的方式.

一旦你克隆了你的分叉回购,你需要添加一个指向原始的遥控器,就像之前的回答所说的那样.他们喜欢把它叫做上游,但没关系.

git remote add upstream git://github.com/octocat/Spoon-Knife.git
Run Code Online (Sandbox Code Playgroud)

然后你去取

git fetch upstream
Run Code Online (Sandbox Code Playgroud)

你会看到可用于合并的版本

From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/master
Run Code Online (Sandbox Code Playgroud)

然后你只需要选择要合并的分支.请注意,这些不是本地分支,它们存储在遥控器下.但是如果你没有一个名为upstream/master(允许)的本地分支,你可以很好地合并下面的行:

git merge upstream/master
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用以下行快捷方式获取/合并(在初始提取之后):

git pull upstream/master
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,使用 `git rebase` 它会工作得更好,并省略那些丑陋的空合并提交 (2认同)