git push的使用

在使用push时,我们要特别注意分支的名称和”关联分支"对于操作的影响;

1.git push
2.git push origin <remote_branch>
3.git push origin <local_branch>:<remote_branch>

  

测试起始环境:
    远程仓库有两个分支:master和dev
    本地仓库由一个分支:master
注:本次只使用dev分支进行演示

[email protected] MINGW64 /e/02.Workspace-test/gitTest (master)
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master

1.git push origin <local_branch>:<remote_branch>

场景:将本地分支推送到远程不同名的分支;
作用:将指定的本地分支推送到指定的远程分支;(这两个分支并没有建立关联关系,且可以不同名)

无论是 git push还是git push local_branch,都需要本地分支与远程分支同名,当需要将本地分支推送到远程不同名分支,则需要使用这种方式;

[email protected] MINGW64 /e/02.Workspace-test/gitTest (dev)
$ git push origin dev:dev_zcz

同步本地的dev和远端的master分支,这样同步后本地的master分支可能会“落后”远程的分支;  

2.git push origin <local_branch>

场景:同步指定分支(非当前分支)到远程分支,如果是当前分支则<local_branch>可以省略
作用:"同步"指定的本地分支到远程关联同名分支;

介绍git push时,对这种情况作了说明,当你想要把非当前分支推送到其关联的远程分支,可以使用这种方法。

[email protected] MINGW64 /e/02.Workspace-test/gitTest (dev)
$ git push origin dev_zcz

上述示例,把本地的dev_zcz分支,同步到远端的dev_zcz分支;

 

特别注意:
1.如果本地dev_zcz的关联分支与dev_zcz名称不一样,则会在远程新建一个dev_zcz分支;
2.新建的远程dev_zcz分支并不会与本地的dev_zcz分支建立关联关系;(本地的dev_zcz还关联的是其检出时的那个分支)
3.如果想在检出时建立分支,需要使用git push -u dev_zcz这样同步时就会关联新创建的远程分支;

3.git push

场景:当前分支已经有关联分支,并且关联分支与当前分支同名;
作用:将当前分支代码同步到远程同名分支;

首先从远程dev分支检出一个不同名的分支dev_zhangcz:

 

[email protected] MINGW64 /e/02.Workspace-test/gitTest (master)
$ git checkout -b dev_zhangcz origin/dev
Switched to a new branch ‘dev_zhangcz‘
Branch dev_zhangcz set up to track remote branch dev from origin.

[email protected] MINGW64 /e/02.Workspace-test/gitTest (dev_zhangcz)
$ git branch
* dev_zhangcz
  master

git checkout -b dev_zhangcz origin/dev   #在本地创建一个 dev_zhangcz 分支,并拉去远端的origin/dev

 这样我们本地就有了一个和远程"dev"相关联的分支"dev_zhangcz",此时我们执行git push会怎么样呢?

 

[email protected] MINGW64 /e/02.Workspace-test/gitTest (dev_zhangcz)
$ git push
fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push origin HEAD:dev

To push to the branch of the same name on the remote, use

    git push origin dev_zhangcz

To choose either option permanently, see push.default in ‘git help config‘.

报错的大意思就是:你当前分支的关联分支(upstream branch)与你分支的名字不匹配(not match);
我们在使用git branch -vv查看一下dev_zhangcz分支的关联分支:

[email protected] MINGW64 /e/02.Workspace-test/gitTest (dev_zhangcz)
$ git branch -vv
* dev_zhangcz 3b7001a [origin/dev] cm
  master      941758f [origin/master] master new

确实dev_zhangcz关联的分支(dev)名字和它不一样;git给出的解决方案
1.push到HEAD分支;
2.push到远程同名的分支(新建);
通常情况下,我们选择方案2,但如果你就是想要push到origin/dev分支,也可以选择重命名当前分支,然后重新执行git push;或者使用git push origin dev

[email protected] MINGW64 /e/02.Workspace-test/gitTest (dev_zhangcz)
$ git branch -m dev_zhangcz dev

[email protected] MINGW64 /e/02.Workspace-test/gitTest (dev)
$ git push
Everything up-to-date

结论:当使用git push执行默认推送时,本地分支需与"关联分支"同名才可以

深入push.default

在git的全局配置中,有一个push.default属性,其决定了git push操作的默认行为。
push.default 有以下几个可选值: nothing, current, upstream, simple, matching

nothing: 直接push会出错,需要显式的指出推送的远程分支,例如:git push origin <remote_branch>;
current: 推送时只会推送当前所在的分支到远程同名分支,如果远程分支不存在相应的同名分支,则创建该分支;
upstream: 推送当前分支到它的upstream分支上,这个模式只适用于推送到与拉取数据相同的仓库(比如central workflow);
simple(默认): simple和upstream是相似的,只有一点不同,simple必须保证本地分支和它的远程 upstream分支同名,否则会拒绝push操作。
matching:推送本地和远程都存在的同名分支。

  

 

 

 

链接:https://www.jianshu.com/p/1abad73f8161
来源:简书

原文地址:https://www.cnblogs.com/weidaijie/p/10893569.html

时间: 2024-10-03 05:03:20

git push的使用的相关文章

&lt;问题解决02&gt;Linux虚拟机使用git push报错--解决方案如下:

问题描述: 使用git push 报错: error: The requested URL returned error: 403 Forbidden while accessing https://github.com/Newlyfly/Hello_World.git/info/refs fatal: HTTP request failed 解决方案: 解决方案来源博客地址:http://blog.csdn.net/happyteafriends/article/details/1155404

使用git push命令如何忽略不想提交的文件夹或者文件

如下场景是在window下的操作. 在使用node的时候有个node_modules文件夹很大,一般情况下不想提交,忽略的办法如: 1.在该仓库目录下创建一个.gitignore文件,用编辑器输入:/node_modules,之后git push 的时候就会忽略这个文件夹 命令行进入该仓库:touch .gitignore 就会创建该文件,记事本打开输入:/node_modules即可 看下前后对比图

git push报错error: failed to push some refs to &#39;[email&#160;protected]:

$ git push -u origin master To [email protected]:xxx/xxx.git ! [rejected] master -> master (fetch first) error: failed to push some refs to '[email protected]:xxx/xxx.git' hint: Updates were rejected because the remote contains work that you do hint:

Git Push 不用再次输入用户名和密码方法

前言 在大家使用github的过程中,一定会碰到这样一种情况,就是每次要push 和pull时总是要输入github的账号和密码,这样不仅浪费了大量的时间且降低了工作效率.在此背景下,本文在网上找了两种方法来避免这种状况,这些成果也是先人提出来的,在此只是做个总结. 1.方法一 1.1 创建文件存储GIT用户名和密码 在%HOME%目录中,一般为C:\users\Administrator,也可以是你自己创建的系统用户名目录,反正都在C:\users\中.文件名为.git-credentials

on the go way (五)git push 403 error

在使用git push的时候产生这种情况 error: The requested URL returned error: 403 while accessing https://github.comgit/info/refs edit .git/config file under your repo directory find url=entry under section [remote "origin"] change it from url=https://[email pr

git push origin与git push -u origin master的区别

$ git push origin 上面命令表示,将当前分支推送到origin主机的对应分支. 如果当前分支只有一个追踪分支,那么主机名都可以省略. $ git push 如果当前分支与多个主机存在追踪关系,那么这个时候-u选项会指定一个默认主机,这样后面就可以不加任何参数使用git push. $ git push -u origin master 上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了. 不带任何参

git push origin master出错:error: failed to push some refs to

1.输入git push origin master 出错:error: failed to push some refs to 那是因为本地没有update到最新版本的项目(git上有README.md文件没下载下来) 本地直接push所以会出错. 2.所以本地要输入git pull 然后出现的英语提示'git pull <repository> <refspec>'显示要选择远程分支 2.就试试指定目标到远程分支 输入git pull origin 出现提示 but did n

git push

push就是把你本地仓储的commit传到远程仓储中去. 用法 git push <remote> <branch> push指定的分支到<remote>中去.  如果对于目标仓储来说不是一次fast-forward的merge, push会失败. 需要先git pull. git push <remote> --force 效果基本上和前一个命令相似, 但是他不管是不是fast-forward的merge都会push成功. 不建议使用这个命令. git p

git push冲突解决

1. 首先,可以试图用git push origin branch-name推送自己的修改:2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并:如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name.3. 如果合并有冲突,则解决冲突,并在本地提交:4. 没有冲突或者解决掉冲突后,再用

git push的一个错误

我在把我的本地分支push到远程仓库的时候,一直失败,错误提示是: $ git push origin masterTo [email protected]:xiaxiaosheng/AndroidRemoteCtrl_Client.git ! [rejected] master -> master (non-fast-forward)error: failed to push some refs to '[email protected]:xiaxiaosheng/AndroidRemoteC