我有一个远程仓库的几个本地克隆。在其中之一中工作,我更新了一些分支并将其推送到远程。然后,我转到另一个不同的克隆,我想获取并更新在此其他本地存储库中缓存的远程服务器。
我有一个很好的程序,但是是手动的。这是一个例子。 首先,在第一个本地克隆存储库中工作,我对branch1,branch2和branch3进行了一些更改,然后进行推送。接下来,在同一个远程仓库的另一个本地克隆中,我想更新其远程缓存的副本,所以我要这样做...
$ git fetch
...says remote counting objects, unpacking etc then a series of lines like...
eb7b3000..67f0ade3 mybranch1 -> origin/mybranch1
eb7b3000..67f0ade3 mybranch2 -> origin/mybranch2
eb7b3000..67f0ade3 mybranch3 -> origin/mybranch3
...and usually also some [new tag] lines
这将标识已由“第一个”本地存储库更新的分支,我将逐个更新每个分支,像这样...
$ git fetch origin mybranch1:mybranch1
$ git fetch origin mybranch2:mybranch2
$ git fetch origin mybranch3:mybranch3
这是一个比较痛苦的手动过程,但是效果很好。 似乎“ git fetch --all”或类似的东西应该执行此操作,也许我在这里没有找到明显的地方,但是我似乎找不到内置的git命令来更新那些其他分支而不将其检出。上面的mybranch1:mybranch1语法似乎完美地做到了这一点,将我带到了我所处的位置,但要确保重新加载的gitk现在将显示所有远程分支的正确信息,这些分支已通过此提取序列进行了更新。
我已经研究了针对类似但不同问题的bash和一线解决方案,例如:[How to fetch all Git branches
这些解决方案可识别所有分支,并解决稍有不同的问题。 我只想获取和更新正在跟踪repo分支的本地分支(如果发生了变化),而不是获取所有的分支,包括我不在本地跟踪的分支。
我正在努力编写别名或bash脚本(或暴露我可能错过的“显而易见”技巧)来解决此问题。我只是想能够输入一个别名或其他命令来执行git fetch,标识所有已更新的分支,然后为每个更改的远程分支执行git fetch原始aaa:aaa的序列。任何帮助表示赞赏。
[当前使用的是git cmd line版本2.17.1.windows.2,如果有问题,很高兴进行更新]
答案 0 :(得分:0)
我有一个远程仓库的几个本地克隆。
另一种方法是仅对仓库进行一个复制。
然后使用git worktree
在自己的文件夹中签出多个分支。
那样,不需要获取,您就一直在代表分支的最新版本的工作树中工作。
如果这种方法不方便,则需要一个脚本(like this one)来更新所有本地分支。
更完整的脚本:“ Git - Automatically fast forward all tracking branches on pull”。
这仅涉及快速更新,而回避任何合并(可能存在冲突)更新。
注意:如前所述,需要进行初始git提取。