当我希望我的分支始终更新时使用Git

时间:2011-04-22 10:20:31

标签: git

  

可能重复:
  Can “git pull --all” update all my local branches?

我是一个快乐的Git用户。但我发现我经常做很多事情,也许这可以自动化。

我的意思是,我正在处理一个本地仓库,而遥控器是Github。我有几个分支,比如masterdevbugfixing。我在多台计算机上工作,所以我经常需要从一台计算机上推出一个分支机构并将其从另一台计算机中拉出来。

这很乏味。这有时会花费很多时间。例如,假设我在master。我可以执行git pull并将更新的origin/master合并到其中。但后来说origin/dev也被更新了。现在我需要git checkout devgit merge origin/dev,最后是git checkout master。这真的很烦人。并且不要让我开始这些时候没有设置分支来跟踪他们各自的远程分支,我必须做git branch --set-upstream master origin/master

有没有办法让所有分支自动在远程分支中合并?我们可以假设所有合并都是快进的。 (如果不是,我只是收到错误消息没问题,所以我会手动合并。)

4 个答案:

答案 0 :(得分:2)

这不是我自己想做的事情,但出于兴趣,我写了一个脚本(我认为)可以做你想做的事情:

首先从未将remote.<name>.skipDefaultUpdate设置为true的每个遥控器更新远程跟踪分支。然后它遍历所有本地分支(即refs/heads下的分支),并且对于每个具有上游分支集的分支,查看是否可以快速转发本地分支。如果是这样,它会更新您的分支。

最后,它尝试将当前分支的上游(如果已设置)合并到当前分支中,就像git pull一样。

我已经对此进行了一些测试,但请注意,由于使用了管道命令git update-ref来执行快进,如果脚本中存在一些错误,则存在潜在的危险,所以请不要担保仔细测试,了解它在做什么,等等。

  

并且不要让我开始这些时候没有设置分支跟踪他们各自的远程分支,我必须做git branch --set-upstream master origin / master

我对该命令的唯一问题是如果您忘记包含master,结果会非常令人困惑 - 更方便的选择是在推送分支的某个场合使用git push -u <remote-name> <refspec>。< / p>

答案 1 :(得分:1)

如果您想以这种方式工作,则没有理由让您的本地分支机构保持最新状态。只需使用git fetch origin来获取另一方的新内容,并仅在您想要提交时才同步我们的本地分支。

在此之前,您只需git checkout origin/dev来检查那里的代码。

答案 2 :(得分:0)

Automatically - 我只能想到使用钩子来做你想要的所有想法automatic你的回购。说一个post-receive钩子(在服务器端)推送,合并,结账等。或者一个post-commit钩子(在客户端)

Git Automatically push to Dev and Production from Central Repository depending on branch pushed

答案 3 :(得分:-1)

我不确定我是否明白你想要什么,但是怎么样:

git pull --all