可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I want to be able to do the following:
Create a local branch based on some other (remote or local) branch (via git branch
or git checkout -b
)
Push the local branch
to the remote repository (publish), but make it
trackable so git pull
and git push
will work immediately.
How do I do that?
I know about --set-upstream
in Git 1.7, but that is a post-creation action. I want to find a way to make a similar change when pushing the branch to the remote repository.
回答1:
In Git 1.7.0 and later, you can checkout a new branch:
git checkout -b <branch>
Edit files, add and commit. Then push with the -u
(short for --set-upstream
) option:
git push -u origin <branch>
Git will set up the tracking information during the push.
回答2:
If you are not sharing your repo with others, this is useful to push all your branches to the remote, and --set-upstream
tracking correctly for you:
git push --all -u
(Not exactly what the OP was asking for, but this one-liner is pretty popular)
If you are sharing your repo with others this isn\'t really good form as you will clog up the repo with all your dodgy experimental branches.
回答3:
Prior to the introduction of git push -u
, there was no git push
option to obtain what you desire. You had to add new configuration statements.
If you create a new branch using:
$ git checkout -b branchB
$ git push origin branchB:branchB
You can use the git config
command to avoid editing directly the .git/config
file.
$ git config branch.branchB.remote origin
$ git config branch.branchB.merge refs/heads/branchB
Or you can edit manually the .git/config
file to had tracking information to this branch.
[branch \"branchB\"]
remote = origin
merge = refs/heads/branchB
回答4:
Simply put, to create a new local branch, do:
git branch <branch-name>
To push it to the remote repository, do:
git push -u origin <branch-name>
回答5:
A slight variation of the solutions already given here:
Create a local branch based on some other (remote or local) branch:
git checkout -b branchname
Push the local branch to the remote repository (publish), but make it trackable so git pull
and git push
will work immediately
git push -u origin HEAD
Using HEAD
is a \"handy way to push the current branch to the same name on the remote\". Source: https://git-scm.com/docs/git-push
In Git terms, HEAD (in uppercase) is a reference to the top of the current branch (tree).
The -u
option is just short for --set-setupstream
. This will add an upstream tracking reference for the current branch. you can verify this by looking in your .git/config file:
![\"Enter](\"https://i.stack.imgur.com/km6gk.png\")
回答6:
I suppose that you have already cloned a project like:
git clone http://github.com/myproject.git
Then in your local copy, create a new branch and check it out:
git checkout -b <newbranch>
Supposing that you made a \"git bare --init\" on your server and created the myapp.git, you should:
git remote add origin ssh://example.com/var/git/myapp.git
git push origin master
After that, users should be able to
git clone http://example.com/var/git/myapp.git
NOTE: I\'m assuming that you have your server up and running. If it isn\'t, it won\'t work. A good how-to is here.
ADDED
Add a remote branch:
git push origin master:new_feature_name
Check if everything is good (fetch origin and list remote branches):
git fetch origin
git branch -r
Create a local branch and track the remote branch:
git checkout -tb new_feature_name origin/new_feature_name
Update everything:
git pull
回答7:
I simply do
git push -u origin localBranch:remoteBranchToBeCreated
over an already cloned project.
Git creates a new branch named remoteBranchToBeCreated
under my commits I did in localBranch
.
回答8:
edit Outdated, just use git push -u origin $BRANCHNAME
Use git publish-branch
from William\'s miscellaneous Git tools (gitorious repo and clone).
OK, no Ruby, so - ignoring the safeguards! - take the last three lines of the script and create a bash script, 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}
Then run git-publish-branch REMOTENAME BRANCHNAME
, where REMOTENAME is usually origin (you may modify the script to take origin as default, etc...)
回答9:
To create a new branch by branching off from existing branch
git checkout -b <new_branch>
and then push this new branch to repository using
git push -u origin <new_branch>
This creates and pushes all local commits to a newly created remote branch origin/<new_branch>
回答10:
I made an alias so that whenever I create a new branch, it will push and track the remote branch accordingly. I put following chunk into the .bash_profile
file:
# 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
Usage: just type gcb thuy/do-sth-kool
with thuy/do-sth-kool
is my new branch name.
回答11:
For GitLab version prior to 1.7, use:
git checkout -b name_branch
(name_branch, ex :master)
To push it to the remote repository, do:
git push -u origin name_new_branch
(name_new_branch, example: feature)
回答12:
Building slightly upon the answers here, I\'ve wrapped this process up as a simple Bash script, which could of course be used as a Git alias as well.
The important addition to me is that this prompts me to run unit tests before committing and passes in the current branch name by default.
$ 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
回答13:
To upload your local branch of a public repository, you need to cd
to the public repository and then use the following code:
git push -u origin branchname