从特定分支拉取到特定分支的git操作

4
我们使用一个Github代码库作为我们的“中央代码库”。
我们计划通过以下方式在暂存服务器上让多个编码人员工作:
1. 编码人员在本地代码库上工作不同的分支; 2. 编码人员将更改推送到Github;然后 3. 编码人员从Github拉取更新到服务器代码库
因此,实际上,在第3步中,编码人员将在暂存代码库上运行以下命令:
git checkout coderA-updates git pull origin coderA-updates git checkout master 有没有一种方法可以在不需要先git checkout的情况下更新特定的分支?
TLDR: 如何做类似于git pull origin remoteBranch localBranch的操作而无需切换活动分支?
谢谢 :)

“更新特定分支”是什么意思?唯一一个文件处于可用状态的分支是当前已检出的分支。如果您想要更新内部存储库,git fetch也会为其他分支执行此操作,但是如果没有当前分支,您将无法使用文件。简而言之,您可以更新任何想要更新的分支或所有分支,但只有当前分支的文件可用。 - eis
嗨eis。我所说的“更新特定分支”是指通过从Github获取最新提交来更新分支。我只想更新分支,不需要文件可用。您如何使用git fetch仅更新特定分支?谢谢。 - Bibokid
3个回答

2
git checkout branchB
git pull origin branchA

这将会把branchA中发生的更改合并到本地的branchB中。 git help merge表示:
将指定提交记录中的更改(自它们的历史记录与当前分支不同的时间点起)合并到当前分支中。
因此,我认为在不将其中一个分支设置为当前分支的情况下,无法使用两个分支。
您可以在当前活动分支中使用git stash保存更改,然后切换到branchB并拉取branchA。完成合并后,您可以切换到保存更改的分支并使用git stash apply
或者,在检出/拉取之前,您也可以简单地提交更改。
希望这可以帮助您。

谢谢Sergey。不过这会改变当前活动的分支。我希望当前活动的分支保持不变。 - Bibokid
我的问题是当有两个程序员在拉取代码时。比如说,程序员A在分支A上工作,程序员B在分支B上工作。当程序员A正在测试分支A时,程序员B必须等待程序员A先完成测试,然后才能将任何内容拉到分支B上。顺便说一下,谢谢 :) - Bibokid
2
@Bibokid,你的意思是这两个程序员正在使用同一个文件系统吗?你能在问题中进一步澄清一下吗? - eis
@eis:2个程序员正在推送、拉取、测试服务器上的更新。 - Bibokid

1
使用简单的fetch
git fetch origin remoteBranch:localBranch

默认情况下,这仅适用于快进更改(请参见文档)。


0

来自git help pull

SYNOPSIS

   git pull [options] [<repository> [<refspec>...]]

DESCRIPTION

[...]

can name an arbitrary remote ref (for example, the name of a tag) or even a collection of refs with corresponding remote-tracking branches (e.g., refs/heads/:refs/remotes/origin/), but usually it is the name of a branch in the remote repository.

所以,你可以执行 git pull remoteBranch:localBranch 命令,它会起作用。

我尝试了 git pull origin remoteBranch:localBranch 但是出现错误:rejected (non-fastforward),尽管我确定 localBranchremoteBranch 的早期版本。 - Bibokid
尝试查看提交哈希值。也许有一个 git rebase 或类似的操作影响了哈希值。 - mgarciaisaia
1
git pull 始终会合并到当前本地检出的分支,即使提供了完整的“remote:local” refspec。根据文档:“更精确地说,git pull 使用给定参数运行 git fetch,并调用 git merge 将检索到的分支头合并到当前分支中。” - Koraktor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接