当前位置: 首页 > news >正文

Git远程操作

为什么80%的码农都做不了架构师?>>>   hot3.png

1 git clone

1.1 克隆远程库

# https协议
git clone https://github.com/yysue/test.git

# ssh协议 推荐这种
git clone git@github.com:yysue/test.git

克隆时,指定远程主机名

git clone -o test git@github.com:yysue/test.git
# -o 指定远程主机名,默认是origin

2 git remote

2.1 列出所有远程主机

git remote -v
# -v显示远程主机的网址
# origin git@github.com:yysue/test.git 表示远程主机及它的网址

2.2 查看主机详细信息

# 查看主机详细信息
git remote show origin

2.3 添加远程主机

# 添加远程主机,注意这里的url是gitee.com
git remote add for_rm git@gitee.com:yysue/test.git
git remote add for_rename git@gitee.com:yysue/test.git

# 添加之后,查看一下远程主机
git remote -v

2.4 删除,重命名远程主机

# 删除远程主机
git remote rm for_rm

# 重命名远程主机
git remote rename for_rename gitee_origin

# 修改之后,查看一下远程主机
git remote -v

3 git fetch

3.1 将远程主机的更新取回本地

git fetch <远程主机名> <分支名> 
# 取回特定分支需要指定分支名
# 将某个远程主机的更新全部取回本地

git fetch <远程主机名> 
# 默认取回所有分支的更新

git fetch
# 默认取回origin主机的所有分支

3.2 查看远程分支

git branch -r
# -r查看远程分支
# 在本地主机上要用"远程主机名/分支名"的形式表示远程分支,如origin/master

3.3 查看所有分支

git branch -a
# -a查看所有分支
# 本地主机的当前分支是master,远程分支是origin/master

3.4 以某分支为基础,创建新分支

git checkout -b dev origin/master
# 以远程主机origin上的master分支为基础创建分支dev并切换到分支dev

4 git pull

4.1 合并分支

git pull <远程主机名> <远程分支名>:<本地分支名>
# 这是完整格式 取回远程主机的某个分支的更新,再与本地的指定分支合并

git pull origin next
# 省略<本地分支名>表示与当前分支合并
# 取回origin/next分支,再与当前分支合并
# 等同于如下两个操作
git fetch origin
git merge origin/master

git pull origin
# 如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名
# 本地的当前分支自动与对应的origin主机进行合追踪分支(remote-tracking branch)进行合并

git pull
# 如果当前分支只有一个追踪分支,连远程主机名都可以省略
# 当前分支自动与唯一一个追踪分支进行合并
# 默认git pull <===> git pull origin master:master
# 默认远程主机为origin,远程分支为master,本地分支为master

git pull --rebase
# 等同于如下两个操作
git fetch origin
git rebase origin/master

4.2 追踪关系

在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动追踪origin/master分支。

手动建立追踪关系

git branch --set-upstream master origin/next
# 指定master分支追踪origin/next分支

4.3 本地同步删除分支

如果远程主机删除了某个分支,默认情况下,git pull不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支

git pull -p
# -p 在本地删除远程已经删除的分支
# 等同于下面的命令
git fetch --prune origin
git fetch -p

4.4 git merge

假设初始的分支情况如下图:

# A在mywork上的操作
git checkout -b mywork origin
echo 'a' >> a.txt
git commit -am 'update a.txt'
echo 'b' >> b.txt
git commit -am 'update b.txt'

# B在origin/master上的操作
echo 'c' >> c.txt
git commit -am 'update c.txt'
echo 'd' >> d.txt
git commit -am 'update d.txt'
git push

下面来区分git mergegit rebase的区别

在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交"(merge commit):

# A在mywork上操作
git pull

4.5 git rebase

但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用 git rebase:

git checkout mywork
git rebase origin

这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。

当'mywork'分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。 如果运行垃圾收集命令(pruning garbage collection), 这些被丢弃的提交就会删除. (请查看 git gc)

5 git push

5.1 将本地的更新推送到远程主机

git push <远程主机名> <本地分支名>:<远程分支名>
# 分支推送顺序写法是<来源地>:<目的地>
# git pull <远程分支>:<本地分支>
# git push <本地分支>:<远程分支>

git push origin master
# 省略<远程分支名>
# 将本地的master分支推送到origin主机的master分支,如果后者不存在,则会被新建

git push origin :master
# 省略<本地分支名>
# 表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支
# 等同于下面的命令,删除origin主机的master分支
git push origin --delete master

git push origin
# 如果当前分支与远程分支存在追踪关系,则<本地分支名>和<远程分支名>都可省略
# 将当前分支推送到origin主机的对应分支

git push
# 当前分支只有一个追踪分支,主机名也可以省略

git push -u origin master
# 如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,
# 这样后面就可以不加任何参数使用git push

5.2 push默认模式

不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。

git config --global push.default matching
# 或者
git config --global push.default simple

5.3 推送所有本地分支

不管是否存在对应的远程分支,将本地的所有分支推送到远程主机,这时需要使用--all选项。

git push --all
# 将所有本地分支推送到远程主机

5.4 强制覆盖远程版本

如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用--force选项。

git push --force
# 本地版本覆盖远程版本,即使远程版本比本地版本新

5.5 推送标签

git push origin --tags
# --tags推送标签(tag),默认不推送

参考

  • Git远程操作详解

  • git merge 和 git rebase 小结

转载于:https://my.oschina.net/yysue/blog/1838119

相关文章:

  • Kafka server.properties配置说明
  • MYSQL的批量插入或更新方法优化
  • Redis 如何分布式,来看京东金融的设计与实践
  • 华为云,有技术,有未来
  • 查看数据库账号
  • 不小心删数据库是一种怎样的体验?
  • 正面反击 Google、FB 等巨头,万维网之父携 Solid 归来
  • cacti 的 “FATAL: Cannot connect to MySQL server on
  • 人机大战引关注 人工智能概念股有望受追捧
  • 0705作业
  • Js模块化之-import和export
  • DevC++连接MySQL可用详细教程
  • LNMP架构 (Ⅱ)——nginx相关配置、nginx代理
  • ----------
  • 重装系统的时候重装不了该怎么办
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • CSS 专业技巧
  • KMP算法及优化
  • Meteor的表单提交:Form
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Mithril.js 入门介绍
  • MYSQL 的 IF 函数
  • Nodejs和JavaWeb协助开发
  • Object.assign方法不能实现深复制
  • Phpstorm怎样批量删除空行?
  • Python 基础起步 (十) 什么叫函数?
  • Spring核心 Bean的高级装配
  • TypeScript实现数据结构(一)栈,队列,链表
  • 大主子表关联的性能优化方法
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 树莓派用上kodexplorer也能玩成私有网盘
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (3)STL算法之搜索
  • (C++)八皇后问题
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (原)本想说脏话,奈何已放下
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转载)CentOS查看系统信息|CentOS查看命令
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • [ linux ] linux 命令英文全称及解释
  • [2016.7 day.5] T2
  • [20171101]rman to destination.txt
  • [Android 数据通信] android cmwap接入点
  • [Angular 基础] - 数据绑定(databinding)
  • [BZOJ1089][SCOI2003]严格n元树(递推+高精度)
  • [C#]winform部署yolov5-onnx模型
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件
  • [exgcd] Jzoj P1158 荒岛野人
  • [flask]http请求//获取请求头信息+客户端信息
  • [HackMyVM]靶场 Quick3