Git Extensions + Git For Windows:获取不存在的分支本地不会创建新的本地分支

时间:2012-06-21 00:11:43

标签: git git-extensions

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

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

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

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

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

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

如果在Pull对话框中,我没有选择任何Remote分支(即将其留空),我得到相同的结果。在这种情况下,进度对话框显示:

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

在早期版本的Git Extensions中,似乎曾经有过从远程创建本地分支的错误。但是,看看Git Extensions项目change log,问题看起来像是在1.55版本中解决了。所以我猜我做错了什么。

我知道我可以使用Git Bash控制台来获取远程分支并从中创建一个新的本地分支。但是,似乎我应该可以通过GUI完成此操作。

我希望得到以下两种方式的答案:

a)是的,你做错了,这就是你应该怎么做(通过GUI);或

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

干杯 西蒙

3 个答案:

答案 0 :(得分:4)

获取将只引入当前分支(和本地跟踪的分支?有人帮助我这一个。)和所有远程分支的知识的所有更改。你真的不希望fetch降低你尚未检查的所有分支的所有提交。如果有数千个分支,这将是不好的。要检查您尚未看到的远程分支,请先获取Checkout分支。

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

现在你要做

Git Extensions - >结帐分行

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

我建议找一些方法来购买Smart Git 3.它远远优于所有其他Windows Git产品。他们有免费的开源许可证版本。

答案 1 :(得分:1)

继Andrew Finnell的回答:

选择 Git Extensions>结帐分支(从Windows资源管理器上下文菜单),结帐分支对话框将会打开。

选择远程分支以及要下拉的远程分支的名称,然后单击结帐结帐远程分支对话框将会打开。

在Checkout Remote Branch对话框中,选择重置名称为“{branch name}”的本地分支,并确保选中合并,然后点击结帐

Checkout Remote Branch dialog

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

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

答案 2 :(得分:0)

是的,你做错了,你应该怎么做(通过GUI); 您正在向本地分支提取远程分支提交,但您还需要将远程分支与Local分支合并。请选择"将远程分支合并到当前分支"选项永远不会选择"只提取不合并"。