我希望能够执行以下操作:
根据其他(远程或本地)分支(通过
git branch
或git checkout -b
)创建本地分支将本地分支推送到远程存储库(发布),但使其可跟踪,
git pull
并git push
可以立即使用。
我怎么做?
我--set-upstream
在Git 1.7中了解,但这是创建后的操作。我想找到一种将分支推送到远程存储库时进行类似更改的方法。
我希望能够执行以下操作:
根据其他(远程或本地)分支(通过git branch
或git checkout -b
)创建本地分支
将本地分支推送到远程存储库(发布),但使其可跟踪,git pull
并git push
可以立即使用。
我怎么做?
我--set-upstream
在Git 1.7中了解,但这是创建后的操作。我想找到一种将分支推送到远程存储库时进行类似更改的方法。
Answers:
在Git 1.7.0和更高版本中,您可以签出一个新分支:
git checkout -b <branch>
编辑文件,添加并提交。然后使用-u
(的缩写--set-upstream
)选项:
git push -u origin <branch>
Git将在推送过程中设置跟踪信息。
push.default
将其设置为upstream
,那么这将无法实现您认为会做的事情。它将尝试推送现有的跟踪分支。使用:git push -u origin mynewfeature:mynewfeature
或先做git branch --unset-upstream
。
-u
每次将分支推送到其远程位置还是仅在第一次使用它时,我们都需要该选项吗?
-u
一次即可启动跟踪。事后使用git push
如果您不与其他人共享您的仓库,这对于将所有分支机构推送到远程并--set-upstream
为您正确跟踪非常有用:
git push --all -u
(不完全是OP的要求,但是这种单线很受欢迎)
如果您要与其他人共享您的存储库,那么这并不是一个好方法,因为您会与所有狡猾的实验分支阻塞存储库。
git pull --all
其全部拉回其他地方?KEWL
git push --all -u
?
在引入之前git push -u
,没有git push
选择来获得您想要的东西。您必须添加新的配置语句。
如果使用以下方法创建新分支:
$ git checkout -b branchB
$ git push origin branchB:branchB
您可以使用该git config
命令来避免直接编辑.git/config
文件。
$ git config branch.branchB.remote origin
$ git config branch.branchB.merge refs/heads/branchB
或者,您可以手动编辑该.git/config
文件以使该分支具有跟踪信息。
[branch "branchB"]
remote = origin
merge = refs/heads/branchB
git push origin -u local_branch:remote_branch
简而言之,要创建一个新的本地分支,请执行以下操作:
git branch <branch-name>
要将其推送到远程存储库,请执行以下操作:
git push -u origin <branch-name>
git branch <branch-name>
和git checkout -b <branch-name>
两个创建一个分支,但结账切换到新的分支
src branch-name does not match any
这里已经给出的解决方案略有变化:
基于其他(远程或本地)分支创建本地分支:
git checkout -b branchname
将本地分支推送到远程存储库(发布),但使其可跟踪,git pull
并git push
可以立即使用
git push -u origin HEAD
使用HEAD
是“将当前分支推送到远程上相同名称的简便方法”。来源:https : //git-scm.com/docs/git-push
用Git术语来说,HEAD(大写)是对当前分支(树)顶部的引用。
该-u
选项只是的缩写--set-upstream
。这将为当前分支添加上游跟踪参考。您可以通过查看.git / config文件来验证这一点:
git push -u origin <branch-name>
不是为我工作,而是使用HEAD
代替而不是<branch-name>
完美地工作:)
我只是做
git push -u origin localBranch:remoteBranchToBeCreated
在已经克隆的项目上。
Git创建了一个新分支,该分支以remoteBranchToBeCreated
我在中所做的提交命名localBranch
。
编辑:这会将您当前的本地分支(可能名为localBranch
)更改为origin/remoteBranchToBeCreated
。要解决此问题,只需键入:
git branch --set-upstream-to=origin/localBranch
因此,您当前的本地分支现在可以origin/localBranch
追溯。
error: src refspec <new branch> does not match any.
尝试时,git会抛出异常。
我想您已经克隆了一个项目,例如:
git clone http://github.com/myproject.git
然后在您的本地副本中,创建一个新分支并签出:
git checkout -b <newbranch>
假设您在服务器上做了一个“ git裸露--init”并创建了myapp.git,您应该:
git remote add origin ssh://example.com/var/git/myapp.git
git push origin master
之后,用户应该能够
git clone http://example.com/var/git/myapp.git
注意:我假设您已启动服务器并正在运行。如果不是,它将不起作用。一个良好的操作方法是在这里。
添加一个远程分支:
git push origin master:new_feature_name
检查一切是否良好(获取原始数据并列出远程分支):
git fetch origin
git branch -r
创建本地分支并跟踪远程分支:
git checkout -tb new_feature_name origin/new_feature_name
更新所有内容:
git pull
git remote add origin
使当地分行可追踪?这是关键命令吗?
git remote add origin
不仅要注册一个新的远程存储库。这只是将分支推送到该远程存储库之前的一个步骤(如果您不想每次都键入整个地址)
编辑过时的,只用git push -u origin $BRANCHNAME
使用git publish-branch
从威廉的杂项的Git工具(gitorious回购和克隆)。
好的,没有Ruby,所以-忽略安全措施!-使用脚本的最后三行并创建一个bash脚本git-publish-branch
:
#!/bin/bash
REMOTE=$1 # Rewrite this to make it optional...
BRANCH=$2
# Uncomment the following line to create BRANCH locally first
#git checkout -b ${BRANCH}
git push ${ORIGIN} ${BRANCH}:refs/heads/${BRANCH} &&
git config branch.${BRANCH}.remote ${REMOTE} &&
git config branch.${BRANCH}.merge refs/heads/${BRANCH}
然后运行git-publish-branch REMOTENAME BRANCHNAME
,其中REMOTENAME通常是原点(您可以修改脚本以将原点作为默认值,等等。)
git push
和git config
命令。我使用脚本的代码来编辑答案。您可能会使用此信息来创建一个小的shell脚本来为您完成操作。
略微根据这里的答案,我将这个过程包装为一个简单的Bash脚本,当然也可以用作Git别名。
对我来说重要的补充是,这促使我在提交之前运行单元测试,并且默认情况下传入当前分支名称。
$ git_push_new_branch.sh
Have you run your unit tests yet? If so, pass OK or a branch name, and try again
usage: git_push_new_branch {OK|BRANCH_NAME}
e.g.
git_push_new_branch -> Displays prompt reminding you to run unit tests
git_push_new_branch OK -> Pushes the current branch as a new branch to the origin
git_push_new_branch MYBRANCH -> Pushes branch MYBRANCH as a new branch to the origin
function show_help()
{
IT=$(cat <<EOF
Have you run your unit tests yet? If so, pass OK or a branch name, and try again
usage: git_push_new_branch {OK|BRANCH_NAME}
e.g.
git_push_new_branch.sh -> Displays prompt reminding you to run unit tests
git_push_new_branch.sh OK -> Pushes the current branch as a new branch to the origin
git_push_new_branch.sh MYBRANCH -> Pushes branch MYBRANCH as a new branch to the origin
)
echo "$IT"
exit
}
if [ -z "$1" ]
then
show_help
fi
CURR_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$1" == "OK" ]
then
BRANCH=$CURR_BRANCH
else
BRANCH=${1:-$CURR_BRANCH}
fi
git push -u origin $BRANCH
为了获得最大的灵活性,您可以使用自定义的Git命令。例如,在您$PATH
的名字下的某个位置创建以下Python脚本git-publish
并将其可执行:
#!/usr/bin/env python3
import argparse
import subprocess
import sys
def publish(args):
return subprocess.run(['git', 'push', '--set-upstream', args.remote, args.branch]).returncode
def parse_args():
parser = argparse.ArgumentParser(description='Push and set upstream for a branch')
parser.add_argument('-r', '--remote', default='origin',
help="The remote name (default is 'origin')")
parser.add_argument('-b', '--branch', help='The branch name (default is whatever HEAD is pointing to)',
default='HEAD')
return parser.parse_args()
def main():
args = parse_args()
return publish(args)
if __name__ == '__main__':
sys.exit(main())
然后git publish -h
将向您显示用法信息:
usage: git-publish [-h] [-r REMOTE] [-b BRANCH]
Push and set upstream for a branch
optional arguments:
-h, --help show this help message and exit
-r REMOTE, --remote REMOTE
The remote name (default is 'origin')
-b BRANCH, --branch BRANCH
The branch name (default is whatever HEAD is pointing to)