mzy git学习,git推送到远程库(八)
git在同步到远程库
关于git中多个用户切换的事情:
完全使用账户密码策略连接远程库:
- 之前一直尝试在本地切换多个用户,发现一直不行,很奇怪?后面发现必须要去win10的凭据管理器删除当前git的凭据。
以上是输入账户密码,进行凭据校验的情况;
完全使用ssh免登陆策略进行远程库连接:
- 如果是要通过ssh方式登陆的话,建议还是不要多用户切换了,因为ssh方式免登陆校验的话,每次都要去生成新的ssh密钥去切换,着实太过于麻烦了。
配合账户密码策略和ssh两种策略管理两个账户:
之前还想过,一个用户使用ssh策略,一个用户采取账号密码策略?没有试过,觉得应该可行?
好的,我刚刚去试了一下,这种方式可行,一个账户使用,账户密码策略;一个账户使用ssh免登陆验证。这样可以不用每次修改,就可以同时在本地使用两个账户!
把本地库推送(备份)到远程库上:
这里说的推送到远程库上的步骤都是针对一开始远程库是空的的操作,并不是在远程库已经有分支,把本地库和远程库进行关联!如果要进行关联的话,请查看这篇文章
场景:
在多人协同工作,或者我们把代码托管到第三方平台上的时候,我们要把本地库和远程仓库对应起来。
其实远程库和本地库性质上一模一样,就是一个为了更方便的备份而已!
我们在单机上跑了这么久的git,终于上网啦!
在本地添加远程库
首先在码云上建一个工程,然后在里面复制远程仓库地址:
从上面的图片中可以看出,有两种协议的仓库地址可以选:
一种就是上面说了的https的,一种就是git自己的协议(通过ssh免登陆验证)。
如果要使用ssh登陆:
# 先使用此命令:
ssh -keygen -t rsa -C "邮箱"
ssh-keygen -t rsa -C "3244874077@qq.com"
生成密钥之后,把公钥复制到自己的码云或者github上,然后省略…
添加远程库映射
# 为当前仓库添加一个远程库:git remote add [仓库名] [地址]
git remote add origin https://gitee.com/yaoguai1998/LearnGit.git
# 默认的仓库名是origin,当然你可以根据仓库特征自己取名。
# 上面是https协议的,这种是通过邮箱密码验证的。
这里就引入了git的remote命令了:
下面简单介绍一下remote的相关命令,及一些常用的参数
提醒以下的$符是linux的命令行开始符,不是命令内容
以下遇到origin我们都默认为远程库名,master都默认是主分支名,dev次分支名
# 1.增加
# 添加远程库 git remote add [origin] [url]
# 为当前仓库添加一个远程库:git remote add [仓库名] [地址]
$ git remote add origin https://gitee.com/yaoguai1998/LearnGit.git
# 2.删除
# 删除一个远程库的地址及连接 git remote rm [origin]
$ git remote rm origin
# 3.查看
# 查看当前本地库中添加了几个远程库和名字
$ git remote
learn
origin
# 查看当前的本地库中的远程库的名字,和push(推送),fetch(抓取)地址
$ git remote -v
learn git@gitee.com:yaoguai1998/LearnGit.git (fetch)
learn git@gitee.com:yaoguai1998/LearnGit.git (push)
origin https://gitee.com/yaoguai1998/LearnGit.git (fetch)
origin https://gitee.com/yaoguai1998/LearnGit.git (push)
## 4.修改url
# git remote set-url [origin] [url]
$ git remote set-url origin git@gitee.com:yaoguai1998/LearnGit.git
# 以上只是remote的常用参数
# 以下为推荐使用:
git remote [-v | --verbose]
or: git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--mirror=<fetch|push>] <name> <url>
or: git remote rename <old> <new>
or: git remote remove <name>
or: git remote set-head <name> (-a | --auto | -d | --delete | <branch>)
or: git remote [-v | --verbose] show [-n] <name>
or: git remote prune [-n | --dry-run] <name>
or: git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]
or: git remote set-branches [--add] <name> <branch>...
or: git remote get-url [--push] [--all] <name>
or: git remote set-url [--push] <name> <newurl> [<oldurl>]
or: git remote set-url --add <name> <newurl>
or: git remote set-url --delete <name> <url>
-v, --verbose be verbose; must be placed before a subcommand
推送到远程库
# git push [仓库名] [分支名]
# 这里的意思是推送主分支,master分支,origin也是默认的仓库名
$ git push origin master
# 也可以这样,意思是仓库名和分支名不是绝对的
# 把 dev分支,推送到仓库地址映射名为gitlearn的远程仓库上
$ git push gitlearn dev
# 第一次推送到远程库的master上,我们建议是加上 -u 参数的
# 加上-u参数,如果远程库不存在此分支的话,就会创建此分支
$ git push -u origin master
# 有时候在码云上初始了远程库,其中的master分支已经初始化好了,所以可能要导致此时无法push上
# 在这种第一次推送,并且仓库是几乎空白的情况下,无法推送的话,我们可以加上--force参数
$ git push --force origin master
# 或者这种形式
$ git push -u origin master -f
从远程库上拉取
git clone
# git clone [url]
# 克隆有三个效果:
# 1.完整下载远程库
# 2.创建本地库并设定别名:origin (并绑定地址)
# 3.初始化本地库:(.git目录)
# 所以建议,如果我们是初始化本地库的话,不要使用pull命令
# 直接使用clone命令,省去了很多麻烦
$ git clone https://gitee.com/yaoguai1998/LearnGit.git
git fetch
# 把远程库上的master分支的内容抓取到本地
git fetch origin master
因为fetch只是把内容从远程库中抓取下来,还没有做合并的动作(merge),所以在fetch之后,vim本地文件,是看不到修改的。
只有通过:git checkout origin/master操作(git checkout 本地库名称/分支名称),才能切换到fetch下来的分支中去,然后才能看到修改
(我猜想这个是切换到版本库中master中的,因为我们的内容被fetch下来之后应该放到本地库中)
如果要切换回去的话,要通过git checkout master 我觉得这个是切换到工作区中的master中,那么其实区别就出来了!
# 切换到本地库中的分支的话:git checkout 版本库名字/分支名字
$ git checkout origin/master
# 切换到工作区中的分支的话:git checkout 分支名称
$ git checkout master
通过fetch操作,只是将远程库中的内容拉取到了本地,但是其实还没有和本地的内容进行合并:其实通过 [远程库名/分支名] 的形式,就是表明是远程库的分支(后面我们操作远程库和本地库的分支建立追踪关系时,远程库的名字就是这样表示的)。
建立分支与分支之间的追踪关系
上面说到远程库和本地库的分支之间建立追踪关系,这里就顺便说明一 下,什么是追踪关系:
在我们上面进行push、fetch以及后面的pull等等和远程库进行交互的操作的时候,我们都会加上分支名称:例如git push origin master、git fetch learngit dev等等,这样每次都需要写后面的分支名称和远程仓库名称,但是我们很多时候就是想推送我们当前所处的分支,远程库其实也就是固定的那一个或者两个,所以追踪关系就是为了解决这样一点的,如果我们建立的本地分支和远程库的分支的追踪关系的话,那么当我们push、pull的时候,就可以省略分支名称,默认就是当前分支和设定的远程分支进行推送和拉取!
如果不建立追踪关系直接:git push的话
# 直接就失败了
$ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin master
查看本地库的分支和远程库的分支的映射关系: git branch -vv
# 查看本地库的分支和远程库的分支的映射关系: branch -vv
$ git branch -vv
dev d62c9e1 dev 上提交readme.txt
issue a278fe9 issue中修改了LICENSE
* master 434cab2 解决冲突
# 发现以上的分支和远程库的分支的都没有建立追踪关系
# 这里尝试给issue和远程库的origin/issue建立追踪关系
# 首先切换到issue分支
$ git checkout issue
Switched to branch 'issue'
# 通过两种方式建立本地分支和远程分支的追踪关系
# 1.git branch -u [仓库名]/[分支名]
# 2.git branch --set-upstream-to [仓库名]/[分支名]
$ git branch -u origin/issue
Branch 'issue' set up to track remote branch 'issue' from 'origin'.
# 再通过:git branch -vv 查看追踪关系,发现issue已经有了
$ git branch -vv
dev d62c9e1 dev 上提交readme.txt
issue f3528d7 [origin/issue] 在issue中修改了LICENSE
master 434cab2 解决冲突
* mzy f3528d7 在issue中修改了LICENSE
# 修改文件之后,git commit 之后,直接git push 发现追踪关系已经生效
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 324 bytes | 324.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by Gitee.com
To gitee.com:yaoguai1998/LearnGit.git
f3528d7..39a6ce1 issue -> issue
# 切断掉联系:git branch --unset-upstream
$ git branch --unset-upstream
# 通过git branch -vv 发现追踪关系已经不存在了!
$ git branch -vv
dev d62c9e1 dev 上提交readme.txt
* issue 39a6ce1 修改了LICENSE
master 25478c7 修改了readme.txt
mzy f3528d7 在issue中修改了LICENSE
git merge
回到正题:
前面我们说fetch只能抓取到本地库中,但是并没有在我们的工作区中体现,所以我们要手动进行一个本地库和我们工作区中的分支进行merge的操作!
# 首先切换回我们的master分支
$ git checkout master
# 首先把远程库中的东西拉取下来
$ git fetch origin/master
# 现在我们去合并版本库中的master:
$ git merge origin/master
以上这样才完成了本地库和远程库的合并
git pull
pull,其实就是fetch和merge的合并操作,一个pull其实就是把fetch和merge全都做了,如果你的程序不复杂,并且协同不那么麻烦,最好还是使用pull操作,来简化你的繁琐的过程。
# 首先把远程库中的东西拉取下来
$ git fetch origin/master
# 现在我们去合并版本库中的master:
$ git merge origin/master
# 等同
# git pull [仓库名] [分支名]
$ git pull origin master
# 如果使用了追踪的话,我们在当前分支上就可以直接
$ git pull
mzy git学习,git推送到远程库(八)的更多相关文章
- 记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用
记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用 目录 大文件无法push到远程仓库 问题 commit的大文件无法push到远程库解决办法 git filter ...
- Git学习笔记(三)远程库(GitHub)协同开发,fork和忽略特殊文件
远程库 远程库,通俗的讲就是不再本地的git仓库!他的工作方式和我们本地的一样,但是要使用他就需要先建立连接! 远程库有两种,一个是自己搭建的git服务器:另一种就是使用GitHub,这个网站就是提供 ...
- Git把本地代码推送到远程github仓库
运用Git版本控制系统进行代码的管理,以便于团队成员的协作,由于之前是使用svn来进行版本控制,所以对于Git使用还有待熟练掌握.Git与svn类似,个人认为两者之间比较直观的区别就是 Git 不需要 ...
- git 本地项目推送至远程仓库
1 在本地文件夹下创建一个 Git 仓库(如test目录下) git init 2 此时test文件夹即是你的maste主分支,你可以在改文件夹下写自己的项目 3 将test文件夹下的内容提交至暂存区 ...
- git本地分支推送到远程分支
1.创建的创建和初始化 创建git仓库可以在远端创建一个仓库, 然后check到本地,在本地的文件里创建工程文件,然后提交 也可以将本地现有的工程和远端的空仓库关联 本地创建了一个工程 iOSDemo ...
- 如何把已有的本地git仓库,推送到远程新的仓库(github private)并进行远程开发;
最近因为疫情,在家干活,连接不上之前的gitlab 服务器:所以不得把现有的代码迁移到github 的私有仓库来进行开发:下面简要记录迁移的过程: 首先,确保你已经配置好本地访问远程私有仓库的所有权限 ...
- [Git] Git把Tag推送到远程仓库
转载: http://blog.csdn.net/hustpzb/article/details/8056518 用git tag来给工程打上标签,但是这个命令只是在本地仓库打标签而已, 为了能把标签 ...
- Git把Tag推送到远程仓库
# 创建附注标签 $ git tag -a v0.1.2 -m “0.1.2版本” 列出标签 $ git tag # 在控制台打印出当前仓库的所有标签 $ git tag -l ‘v0.1.*’ # ...
- git 本地项目推送到远程服务器
3进入本地电脑的将要上传的项目的目录下面 1)git init 初始化一个git 2) vim .gitignore 新增以及编写这个文件 node_modules/ 意思就是上传的时候忽略这个文件 ...
随机推荐
- 【记录】如何造一个vite插件(2)
上一篇已经把vite插件的基础结构搭建起来了,这一次就来聊聊继续完善开发环境. 完善开发环境 生成d.ts文件 先来修改一下lib/index.ts这个文件 export interface user ...
- Requests方法 -- Blog流程类进行关联
1.接口封装关联 1.有些接口经常会用到比如登录的接口,这时候我们可以每个接口都封装成一个方法,如:登录.保存草稿.发帖.删帖,这四个接口就可以写成四个方法2.接口封装好了后,后面我们写用例那就直接调 ...
- 【JavaWeb】请求和响应Request&Response
请求 请求对象 关于请求 顾名思义,意思就是请求一个"对象" 请求不到的,别想了 请求,就是使用者希望从服务器端索取一些资源,向服务器发出询问.在B/S架构中,就是客户浏览器向服务 ...
- js里的发布订阅模式及vue里的事件订阅实现
发布订阅模式(观察者模式) 发布订阅模式的定义:它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知. 发布订阅模式在JS中最常见的就是DOM的事件绑定与触发 ...
- Cesium局部区域精细瓦片数据下载技巧
当Cesium加载局部的目标地区(如中国某个市)的0-18层或更高层数据时,当缩小到zoom较小时可能地球有部分区域(如南半球或左半球)无瓦片覆盖. 为使得整个地球有瓦片覆盖,可利用以下技巧下载瓦片: ...
- python里面的MD5加密 ---# hashlib包的使用
在应用程序的接口里,常用到签名:其中签名里用到MD5加密,这里用hashlib实现 hashlib 概念:Hash,译做"散列",也有直接音译为"哈希"的.把任 ...
- 第十六篇 -- QListWidget与QToolButton(功能)
效果图: 添加的部分,就是对几个action绑定了槽函数,完成相应的功能. listWidget操作的都是item,添加一个item,删除一个item,插入一个item等等.那么只需要知道item的几 ...
- tomcat与springmvc 结合 之---第20篇 springmvc 对于加载的bean对象存储在哪里
是
- OpenFaaS实战之七:java11模板解析
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 搭建SSM基础环境>基于idea
目录 搭建SSM基础环境 创建一个Web项目 导入所需要的jar包 在项目目录下创建一个Resources文件夹并设置为类路径 在src目录下创建项目的初始文件夹目录 在resources文件夹下创建 ...