我已经用--track
选项设置了跟踪分支,当我在master
上执行git pull
时,它会获取origin/branchname
的所有分支,但不会与本地跟踪分支合并。这非常烦人,因为如果我以后在master
上执行git push
,它会说非快进更新在跟踪分支上被拒绝。因为它们在初始的git pull
上没有被快进。
我的问题是:如何使git pull
获取所有分支并自动快进所有跟踪分支?
- 注意:
git pull
曾经用我的GitHub仓库快进我所有的跟踪分支,但是现在我用Gitolite建立了我自己的仓库,这个问题突然出现了。*
6条答案
按热度按时间pkbketx91#
Shell脚本,用于将其上游分支设置为匹配的源/分支的所有分支快进,而不执行任何 checkout
通过运行
git branch -vv
确保所有分支的上游分支都设置正确。复制粘贴到文件中并执行chmod 755:
332nm8kg2#
如果你真的想快进所有正在跟踪远程分支的本地分支,你可能需要考虑把这个作为别名添加到你的
~/.gitconfig
中:然后你可以运行
git pull-all
,它将遍历你的本地分支,并在每个分支上运行一个git pull --ff-only
。gg58donl3#
但是等待:
git pull
的第二步,在fetch
部分之后)文件,除非先 checkout 分支。参见“Can “git pull --all
” update all my local branches?“master
上的git pull
将合并master
上的文件,这意味着下一次推送将是快进推送。只有在 * 您的 * 推送之前已经从另一个存储库 * 推送到远程master
* 时,才会发生非快进。注意:我想您已经跟踪了所有的远程分支,如“Track all remote git branches as local branches.“中所示
注意:Git 2.0(2014年第二季度)将在commit b814da8中引入一个配置
pull.ff
:默认情况下,Git在合并当前提交的后代提交时不会创建额外的合并提交,而是快进当前分支的尖端。
false
时,此变量告诉Git在这种情况下创建一个额外的合并提交(相当于从命令行提供--no-ff
选项)。*当设置为
only
时,只允许这种快进合并(相当于从命令行提供--ff-only
选项)。mzsu5hc04#
下面的单行代码在可能的情况下快进所有具有上游分支的分支,否则输出错误:
它是如何工作的?
它使用
git branch
命令的自定义格式。对于具有上游分支的每个分支,它将打印一行,其模式如下:这可以直接通过管道传输到
sh
(假设分支名称是格式良好的)。省略| sh
,看看它在做什么。警告
当前 checkout 的分支将不会更新,并显示如下消息
为此,您可以求助于常规的
git pull --ff-only
。别名
将以下内容添加到
.gitconfig
,以便git fft
执行此命令:别名是“快进跟踪(分支)"的缩写。
wqnecbli5#
我只是编写了一个小工具来实现这一点。https://github.com/changyuheng/git-fast-forward-all
此工具的优点:
1.在一个仓库中支持多个远程。(
hub sync
目前不支持多个远程。)1.支持本地分支和对应的远程跟踪分支有不同的名称。
1.比其他为每个分支提取远程的脚本快得多。
1.没有容易出错的正则表达式解析/编辑。
62lalag46#
例如,SmartGit有一个选项,如果你切换到一个分支,它会自动合并来自跟踪分支的更改。