Lak*_*sad 572 git version-control branch push
我想默认推送和拉出所有分支,包括新创建的分支.
我可以为它定义一个设置吗?
否则,当我在本地添加一个新分支并且我想从服务器中提取它时,最简单的方法是什么?
我创建了一个具有相同名称的新分支,并试图拉,但它不起作用.问我分支机构的所有远程配置.我该如何设置它.
bri*_*010 1223
最简单的方法是:
git push --all origin
Run Code Online (Sandbox Code Playgroud)
这将推动标签和分支.
Jak*_*ski 145
使用现代git,您总是获取所有分支(作为远程跟踪分支到refs/remotes/origin/*
命名空间,用git branch -r
或可见git remote show origin
).
默认情况下(请参阅push.default
配置变量的文档),您可以推送匹配的分支,这意味着首先您必须git push origin branch
为git执行此操作以始终将其推送git push
.
如果要始终推送所有分支,可以设置push refspec.假设遥控器已命名,origin
您可以使用git config:
$ git config --add remote.origin.push '+refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push '+refs/tags/*:refs/tags/*'
Run Code Online (Sandbox Code Playgroud)
或直接编辑.git/config
文件以具有以下内容:
[remote "origin"] url = user@example.com:/srv/git/repo.git fetch = +refs/heads/*:refs/remotes/origin/* fetch = +refs/tags/*:refs/tags/* push = +refs/heads/*:refs/heads/* push = +refs/tags/*:refs/tags/*
小智 32
在推送规范中包含+可能是一个坏主意,因为这意味着即使没有-f,git也会愉快地执行非快进推送,如果远程服务器设置为接受这些,则可能会丢失历史记录.
试试吧:
$ git config --add remote.origin.push 'refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push 'refs/tags/*:refs/tags/*'
$ git config --add remote.origin.fetch 'refs/heads/*:refs/remotes/origin/*'
$ git config --add remote.origin.fetch 'refs/tags/*:refs/tags/*'
Run Code Online (Sandbox Code Playgroud)
vik*_*027 19
我曾使用以下命令将所有分支迁移到新存储库.
~$ git clone --mirror <url_of_old_repo>
~$ cd <name_of_old_repo>
~$ git remote add new-origin <url_of_new_repo>
~$ git push new-origin master
~$ git push new-origin --mirror
Run Code Online (Sandbox Code Playgroud)
注意:在将Atlassian Stash的repo克隆到AWS CodeCommit(空白回购)时,我必须使用倒数第二个(即首先推送主控)命令.我不确定原因,但是在推(git push new-origin --mirror
)默认分支后指的是其他一些分支master
.
Lan*_*and 11
如果您要将分支机构移动到旧的仓库并且没有所有旧的仓库分支本地,则需要先跟踪它们.
for remote in `git branch -r | grep -v '\->'`; do git branch --track $remote; done
Run Code Online (Sandbox Code Playgroud)
然后添加新的远程仓库:
git remote add bb <path-to-new-repo>
Run Code Online (Sandbox Code Playgroud)
然后你可以使用这个命令全部推送:
git push -u bb --all
Run Code Online (Sandbox Code Playgroud)
或者您可以使用此处其他响应中提到的git config命令配置repo,如果您没有这样做或只想移动本地分支.
重要的是,其他响应只会推动所有LOCAL分支.如果分支仅存在于备用REMOTE存储库中,则它们将在不先跟踪它们的情况下移动.这里介绍的for循环将有助于此.
小智 8
我在这里找到了最好和最简单的方法,就像 @kumarahul 发布的那样,对我来说就像一个魅力,它将所有标签和分支从原点推送到新的远程:
git remote add newremote new-remote-url
git push newremote --tags refs/remotes/origin/*:refs/heads/*
Run Code Online (Sandbox Code Playgroud)
我使用了“git push --all -u newremote”,但它只将签出的分支推送到 newremote。
Git:将所有分支推送到新的远程
作者:Keith Dechant,软件架构师
以下是一些人可能在使用 Git 存储库时遇到过的场景。您有一个 Git 存储库的工作副本,例如来自旧服务器的副本。但您只有工作副本,并且无法访问源。所以你不能只是分叉它。但是您想将整个存储库和所有分支历史记录推送到新的远程。
如果您的工作副本包含来自旧远程的跟踪分支(origin/branch1、origin/branch1 等),则这是可能的。如果这样做,您将拥有整个存储库和历史记录。
然而,就我而言,有几十个分支机构,其中一些或全部我从未在当地查看过。推动他们所有人似乎是一个沉重的负担。那么,如何进行呢?
我确定了两个选择:
选项 1:检查每个分支并推送 我可以做到这一点,我什至可以编写一个 Bash 脚本来提供帮助。但是,这样做会在每次签出时更改我的工作文件,并且会为每个远程跟踪分支创建一个本地分支。对于大型仓库来说,这会很慢。
选项 2:推送而不更改工作副本 还有第二种选择,它不需要签出每个分支,不会在工作副本中创建无关的分支,甚至不会修改工作副本中的文件。
如果您的旧的、不再活动的遥控器称为“oldremote”,而您的新遥控器称为“newremote”,则可以使用以下命令仅推送远程跟踪分支:
git push newremote refs/remotes/oldremote/*:refs/heads/*
在某些情况下,也可以仅推送分支的子集。如果分支名称以斜杠命名(例如oldremote/features/branch3、oldremote/features/branch4等),则只能推送名称以“oldremote/features”开头的远程跟踪分支:
git push newremote refs/remotes/oldremote/features/*:refs/heads/features/*
无论您推送所有分支还是仅推送其中部分分支,Git 都将执行整个操作,而无需创建任何新的本地分支,也无需更改您的工作文件。每个与您的模式匹配的跟踪分支都将被推送到新的远程。
有关该主题的更多信息,请查看 Stack Overflow 上的此主题。
发布日期:2017 年 10 月 9 日
要查看所有分支,git branch -a
请执行:
for remote in `git branch -r`; do git branch --track $remote; done
git fetch --all
git pull --all
Run Code Online (Sandbox Code Playgroud)
现在你可以看到所有的分支:
git branch
Run Code Online (Sandbox Code Playgroud)
推动所有分支尝试:
git push --all
Run Code Online (Sandbox Code Playgroud)
如果您要将所有分支从旧仓库移动到新仓库,那么在本地仓库中,您需要在推送到新仓库之前设置每个分支到现有原始分支的跟踪,否则所有原始分支都不会出现在新的起源。通过跟踪或检查每个分支手动执行此操作,或使用一个班轮:
for remote in `git branch -r | grep -v '\->' | grep -v master`; do git branch --track `echo $remote|sed 's=origin/=='` `echo $remote`; done
Run Code Online (Sandbox Code Playgroud)
这个单行命令基于本页其他答案中的版本,但可以说更好,因为:
接下来,如果您要切换原点,请替换旧原点的链接并指向新的遥控器。确保首先使用 bitbucket/github GUI 创建新的远程,但不要向其中添加任何文件,否则会出现合并问题。例如
git remote set-url origin git@bitbucket.org:YOUR/SOMEREPO.git
Run Code Online (Sandbox Code Playgroud)
现在推。请注意,还需要第二个命令来推送标签:
git push -u --all origin
git push --tags origin
Run Code Online (Sandbox Code Playgroud)