5

我在 Git For Windows(以前称为 msysgit)1.7.10.msysgit.1 上运行 Git Extensions 2.32。

另一个用户创建了一个新分支并将其推送到远程存储库。我想将该新分支提取到我的本地存储库。

这张图片显示了我正在尝试做的事情。主当前已签出,另一个用户添加了一个新分支“brentfo”,他已将其推送到远程存储库。我现在想将该新分支提取到我的本地存储库。

我打开 Git Extensions Pull 对话框,如图所示。我使用合并选项“不合并,仅获取远程更改”从源中提取,选择新的远程分支“brentfo”。当我单击 Pull 按钮时,我会看到一个进度对话框:

c:\Program Files (x86)\Git\bin\git.exe fetch --progress "origin" +refs/heads/brentfo
Done
From //dnzchfile1/git-chch$/mRouteDotNET
 * branch            brentfo    -> FETCH_HEAD

进度对话框不显示任何错误。该过程似乎正常完成。

FETCH_HEAD 文件显示以下内容:

eea033921fea43acf34a5baa380d1666181b56aa        branch 'master' of //server/gitrepo/mRouteDotNET
5e0640e42d04a744aae2e95663a13c0747cacaf1    not-for-merge   branch 'brentfo' of //server/gitrepo/mRouteDotNET
934e6034c526b703ac69b26497e0131f9bb71c2c    not-for-merge   branch 'mRoutePCLib' of //server/gitrepo/mRouteDotNET

然而,当我之后查看提交日志时,似乎什么都没有发生(提交日志出现在上图拉对话框图像的背景中)。新分支 brentfo 尚未在我的本地存储库中创建。当我拉下分支的下拉列表时,仍然只有两个:master 和 mRoutePCLib。

如果在“拉”对话框中我没有选择任何远程分支(即留空),我会得到相同的结果。在这种情况下,进度对话框显示:

c:\Program Files (x86)\Git\bin\git.exe fetch --progress "origin" 
Done

在早期版本的 Git Extensions 中,似乎曾经存在与从远程分支创建本地分支有关的错误。但是,查看 Git Extensions 项目更改日志,问题似乎早在 1.55 版中就已解决。所以我猜我做错了什么。

我知道我可以使用 Git Bash 控制台来获取远程分支并从中创建一个新的本地分支。但是,似乎我应该能够通过 GUI 做到这一点。

我希望得到以下任一方面的答案:

a) 是的,你做错了,你应该这样做(通过 GUI);或者

b) 这是一个已知问题,您必须从命令行界面 (Git Bash) 执行此操作,直到错误得到修复。

干杯西蒙

4

3 回答 3

5

获取只会引入当前分支(以及本地跟踪的分支?有人帮我解决这个问题)中的所有更改以及所有远程分支的知识。您真的不希望 fetch 取消您尚未签出的所有分支的所有提交。如果有数千个分支,那就太糟糕了。要签出您还看不到的远程分支,请先获取然后签出分支。

您已经获取了远程分支的存在。

现在你想做

Git 扩展 -> 结帐分支

将其从本地更改为远程。在下拉列表中选择远程分支。说好,它会询问您是否要创建本地分支然后跟踪它。确保单击是。

我建议想办法购买 Smart Git 3。它比所有其他 Windows Git 产品都要好得多。他们有一个免费的开源许可证版本。

于 2012-06-21T00:18:21.067 回答
2

继 Andrew Finnell 的回答之后:

选择Git Extensions > Checkout 分支(从 Windows 资源管理器上下文菜单中)后,将打开Checkout Branch 对话框

选择Remote branch和要下拉的远程分支的名称,然后单击CheckoutCheckout Remote Branch 对话框将打开。

在 Checkout Remote Branch 对话框中,选择Reset local branch with name '{branch name}'并确保Merge被选中,然后单击Checkout

签出远程分支对话框

这将创建一个新的本地分支,使用远程分支的更改对其进行更新,并在本地分支和远程分支之间创建映射,以便可以在它们之间推送和拉取更改。

注意: 不要选择“使用名称'{remote name}_{branch name}'创建本地分支”。这将创建一个本地分支,但它将以远程存储库的名称为前缀(在上面的示例中,本地分支将被命名为“origin_DSIChanges”而不是“DSIChanges”)。

于 2012-06-21T03:34:21.303 回答
0

是的,你做错了,你应该这样做(通过 GUI);您正在获取远程分支提交到本地分支,但您还需要将远程分支与本地分支合并。请选择“将远程分支合并到当前分支”选项永远不要选择“仅获取不合并”。

于 2015-10-28T05:35:42.403 回答