Col*_*ell 246 git github git-pull git-remote git-branch
我有一个在GitHub上托管的项目,有人分叉了.在他们的分支上,他们创建了一个新的分支"foo"并进行了一些更改.如何将他们的"foo"拉入我的仓库中名为"foo"的新分支?
我知道他们可以向我提交拉动请求,但我想自己启动这个过程.
假设如下:
ral*_*nja 320
git remote add coworker git://path/to/coworkers/repo.git
git fetch coworker
git checkout --track coworker/foo
Run Code Online (Sandbox Code Playgroud)
这将设置一个本地分支foo,跟踪远程分支coworker/foo.因此,当您的同事做出一些更改时,您可以轻松地将它们拉出来:
git checkout foo
git pull
Run Code Online (Sandbox Code Playgroud)
回复评论:
酷:)如果我想对该分支进行自己的更改,我应该从"foo"创建第二个本地分支"bar"并在那里工作而不是直接在我的"foo"上工作吗?
即使我推荐它,您也不需要创建新分支.你也可以直接提交foo并让你的同事拉你的分支.但是该分支已经存在,您的分支foo需要设置为它的上游分支:
git branch --set-upstream foo colin/foo
Run Code Online (Sandbox Code Playgroud)
假设colin您的存储库(您的同事存储库的远程)以类似的方式定义:
git remote add colin git://path/to/colins/repo.git
Run Code Online (Sandbox Code Playgroud)
ant*_*tak 89
不,您不需要将它们添加为遥控器. 这将是繁琐的,每次都很痛苦.
git fetch git@github.com:theirusername/reponame.git theirbranch:ournameforbranch
Run Code Online (Sandbox Code Playgroud)
这将创建一个名为local的分支ournameforbranch,它与theirbranch它们的分支完全相同.对于问题示例,最后一个参数将是foo:foo.
:ournameforbranch如果想出一个与你自己的分支没有冲突的名字,那么注意部分可以进一步停止.在这种情况下,可以使用被调用的引用FETCH_HEAD.你可以git log FETCH_HEAD看到他们的提交,然后做一些事情,如cherry-picked樱桃挑选他们的提交.
通常情况下,你想要修复他们的东西并将其推回去.这也是可能的:
git fetch git@github.com:theirusername/reponame.git theirbranch
git checkout FETCH_HEAD
# fix fix fix
git push git@github.com:theirusername/reponame.git HEAD:theirbranch
Run Code Online (Sandbox Code Playgroud)
如果在分离状态下工作担心你,请务必创建一个分支使用:ournameforbranch和替换FETCH_HEAD以及HEAD上面的ournameforbranch.
Sub*_*ion 16
下面是一个很好的权宜之计,它与 GitHub 一起使用,用于从另一个用户的分支中检出 PR 分支。您需要知道拉取请求 ID(GitHub 与 PR 标题一起显示)。
例子:
修复你的不安全代码#8
alice想要将 1 个提交合并到your_repo:masterfromher_repo:branch
git checkout -b <branch>
git pull origin pull/8/head
Run Code Online (Sandbox Code Playgroud)
如果与origin.
替换8为正确的拉取请求 ID。
Pet*_*ter 10
如果antak回答:
git fetch git@github.com:<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>
Run Code Online (Sandbox Code Playgroud)
给你:
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Run Code Online (Sandbox Code Playgroud)
然后(按照Przemek D的建议)使用
git fetch https://github.com/<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>
Run Code Online (Sandbox Code Playgroud)
GitHub 相对于前面的答案有一个新选项,只需从 PR 复制/粘贴命令行:
Merge或Squash and merge按钮view command line instructions如果分叉的回购受到保护,因此您无法直接推入其中,并且您的目标是更改他们的 foo,那么您需要像这样将他们的分支 foo 放入您的回购中:
git remote add protected_repo https://github.com/theirusername/their_repo.git
git fetch protected_repo
git checkout --no-track protected_repo/foo
Run Code Online (Sandbox Code Playgroud)
现在您有一个 foo 的本地副本,没有与之关联的上游。您可以提交更改(或不提交),然后将您的 foo 推送到您自己的远程存储库。
git push --set-upstream origin foo
Run Code Online (Sandbox Code Playgroud)
现在 foo 位于您在 GitHub 上的存储库中,并且您的本地 foo 正在跟踪它。如果他们继续对 foo 进行更改,您可以获取他们的更改并合并到您的 foo 中。
git checkout foo
git fetch protected_repo
git merge protected_repo/foo
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
113926 次 |
| 最近记录: |