我怎样才能:
从另一个分支创建一个本地分支(通过 git branch 或 git checkout -b)。将本地分支推送到远程存储库(即发布),但使其可跟踪,以便 git pull 和 git push 可以工作。
git checkout -b branch
, git push
=>它会打印一条错误消息,其中包含您需要运行的命令。然后复制/粘贴该命令。 :)
在 Git 1.7.0 及更高版本中,您可以签出一个新分支:
git checkout -b <branch>
编辑文件,添加和提交。然后 push with the -u
(short for --set-upstream
) 选项:
git push -u origin <branch>
Git 会在推送过程中设置跟踪信息。
如果您不与其他人共享您的存储库,这有助于将您的所有分支推送到远程,并--set-upstream
为您正确跟踪:
git push --all -u
(不完全是 OP 所要求的,但这种单线非常受欢迎)
如果您与其他人共享您的存储库,这不是一个很好的形式,因为您将使用所有狡猾的实验分支阻塞存储库。
git pull --all
将其全部拉回其他地方?克尔
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>
都创建了一个分支,但结帐切换到新分支
这里已经给出的解决方案略有不同:
基于其他(远程或本地)分支创建本地分支: 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 在我在 localBranch
中所做的提交下创建了一个名为 remoteBranchToBeCreated
的新分支。
编辑:这会将您当前的本地分支(可能命名为 localBranch
)上游更改为 origin/remoteBranchToBeCreated
。要解决这个问题,只需键入:
git branch --set-upstream-to=origin/localBranch
或者
git branch -u origin/localBranch
因此,您当前的本地分支现在跟踪 origin/localBranch
。
error: src refspec <new branch> does not match any.
。
edit 已过时,只需使用 git push -u origin $BRANCHNAME
使用 William's miscellaneous Git tools 中的 git publish-branch
。
好的,没有 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 脚本来为您执行推送。
我想您已经克隆了一个项目,例如:
git clone http://github.com/myproject.git
然后在您的本地副本中,创建一个新分支并检查它: git checkout -b
注意:我假设您的服务器已启动并正在运行。如果不是,它将无法正常工作。一个很好的方法是here。
添加
添加远程分支:
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 checkout -b <new_branch>
然后使用将这个新分支推送到存储库
git push -u origin <new_branch>
这会创建所有本地提交并将其推送到新创建的远程分支 origin/<new_branch>
将本地更改推送到新功能分支的完整 Git 工作流程如下所示
拉取所有远程分支
git pull --all
立即列出所有分支
git branch -a
结帐或创建分支(将 <feature branch>
替换为您的分支名称):
git checkout -b <feature branch>
显示当前分支。必须在前面显示 *
git branch
添加您的本地更改(这里是故意的)
git add .
现在提交您的更改:
git commit -m "Refactored/ Added Feature XYZ"
重要提示:从 master 获取更新:
git pull origin feature-branch
现在推送您的本地更改:
git push origin feature-branch
对于 1.7 之前的 GitLab 版本,请使用:
git checkout -b name_branch
(名称分支,例如:master
)
要将其推送到远程存储库,请执行以下操作:
git push -u origin name_new_branch
(name_new_branch,例如:feature
)
我创建了一个别名,这样每当我创建一个新分支时,它就会相应地推送和跟踪远程分支。我将以下块放入 .bash_profile
文件中:
# Create a new branch, push to origin and track that remote branch
publishBranch() {
git checkout -b $1
git push -u origin $1
}
alias gcb=publishBranch
用法:只需输入 gcb thuy/do-sth-kool
,thuy/do-sth-kool
是我的新分支名称。
你可以在两个陡峭的地方做到这一点:
1. 使用 checkout
创建本地分支:
git checkout -b yourBranchName
随心所欲地使用您的分支机构。
2. 使用 push
命令自动创建分支并将代码发送到远程存储库:
git push -u origin yourBanchName
有多种方法可以做到这一点,但我认为这种方法非常简单。
稍微建立在此处的答案之上,我将这个过程包装为一个简单的 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
git_push_new_branch.sh
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 push --set-upstream origin <your branch name>
我认为这是最简单的别名,添加到您的 ~/.gitconfig
[alias]
publish-branch = !git push -u origin $(git rev-parse --abbrev-ref HEAD)
你只要跑
git publish-branch
并且...它发布了分支
为了获得最大的灵活性,您可以使用 custom Git command。例如,在您的 $PATH
中某处以名称 git-publish
创建以下 Python 脚本并使其可执行:
#!/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)
push.default
设置为upstream
,则这不会像您认为的那样做。它将尝试推送现有的跟踪分支。使用:git push -u origin mynewfeature:mynewfeature
或先执行git branch --unset-upstream
。git push -u origin HEAD
-u
一次即可启动跟踪。之后只需使用git push